C++:Example:DigitsCount
10진수 정수형 숫자의 자릿수 찾는 방법.
Implementation
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int countDigit_v1(int n)
{
int count = 0;
while (n != 0) {
n = n / 10;
++count;
}
return count;
}
int countDigit_v2(int n)
{
if (n == 0)
return 0;
return 1 + countDigit_v2(n / 10);
}
int countDigit_v3(int n)
{
return floor(log10(n) + 1);
}
// Driver code
int main(int argc, char ** argv)
{
int volatile n = atoi(argv[1]);
int volatile result = 0;
int const test_count = 10000000;
int i;
for (i = 0; i < test_count; ++i) {
result = countDigit_v1(n);
}
//real 0m0.149s
//user 0m0.143s
//sys 0m0.003s
//
//$ time ./a.out 1000000000
//real 0m0.714s
//user 0m0.703s
//sys 0m0.004s
for (i = 0; i < test_count; ++i) {
result = countDigit_v2(n);
}
//real 0m0.198s
//user 0m0.191s
//sys 0m0.003s
//
//$ time ./a.out 1000000000
//real 0m0.897s
//user 0m0.881s
//sys 0m0.007s
for (i = 0; i < test_count; ++i) {
result = countDigit_v3(n);
}
// real 0m0.158s
// user 0m0.151s
// sys 0m0.003s
//$ time ./a.out 1000000000
//
//real 0m0.125s
//user 0m0.118s
//sys 0m0.003s
printf("%d\n", result);
return 0;
}
Result
자릿수가 늘어날 수록 로그를 사용한 방법(floor(log10(n) + 1);
)이 가장 빠르다.