Compter le nombre de chiffres - quelle méthode est la plus efficace?

Il y a plus d'une solution pour trouver le nombre de chiffres dans un nombre donné.

Par exemple:

Méthode 1:

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

Méthode 2:

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

Méthode 3:

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

La question est - ce qui est la méthode la plus efficace? Je sais que la méthode 2 est O(n) mais que penser de la méthode 1 et la méthode-3? Comment puis-je trouver le temps d'exécution de la complexité des fonctions de la bibliothèque?

  • Cela dépend de ce que tu veux dire par O. O se réfère généralement à une complexité asymptotique, mais log10, par exemple, ne peut traiter que d'un fixe d'entrée de gamme, donc c'est en fait O(1).
  • vous pouvez toujours tester pour le savoir, et de poster vos résultats...
  • En écho à AShelly, la seule façon de le savoir est de code tous les trois versions et de comparer leurs performances.
  • Si vous vous attendez à num=0 de retour 1 de la Méthode 1 est la seule solution qui fonctionne. Dans mon test, les trois méthodes retourné un nombre différent pour 0.