Подсчитайте количество цифр - какой метод наиболее эффективен? - PullRequest
21 голосов
/ 15 марта 2012

Существует более одного решения для нахождения числа цифр в данном номере.

Например:

Метод-1:

int findn(int num)
{
    char snum[100];
    sprintf(snum, "%d", num);
    return strlen(snum);
}

Метод-2:

int findn(int num)
{
    if (num == 0) return 1;
    int n = 0;
    while(num) {
        num /= 10;
        n++;
    }
    return n;
}

Метод-3:

int findn(int num)
{
    /* math.h included */
    return (int) log10(num) + 1;
}

Вопрос в том, какой метод наиболее эффективен?Я знаю, что метод-2 O(n), но как насчет метода-1 и метода-3?Как найти сложность библиотечных функций во время выполнения?

Ответы [ 11 ]

0 голосов
/ 30 декабря 2017

Использование журнала может быть хорошим вариантом ...

  1. Если целевая машина имеет аппаратную поддержку для него
  2. Если вы уверены, что int можно преобразовать в double и обратно без потери точности.

Пример реализации ...

int num_digits(int arg) {
    if (arg == 0) {
        return 1;
    }

    arg = abs(arg);

    return (int)log10(arg)+1;
}
...