在给定数字中查找数字位数的解决方案不止一种。

例如:

方法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呢?如何找到库函数的运行时复杂性?

最佳答案

以下内容更加有效:

int findn(int num)
{
   if ( num < 10 )
      return 1;
   if ( num < 100 )
      return 2;
   //continue until max int
}

您可以通过执行二进制搜索来进一步优化此功能,但这将是过大的选择。

关于c - 计算位数-哪种方法最有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9721042/

10-16 21:24