Skip to content

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);)이 가장 빠르다.

See also

Favorite site