C > 求十進制數的位數的2種方法


對於10進制數d,求d位數。

例:

d=1000,位數=4 (分別是1,0,0,0)

 

1.將d逐項除10(常規方法)

 

#include <stdio.h>

int
main() { int d = 1000; int counter = 0; while(d) { counter ++; d /= 10; } printf("%d\n", counter - 1); return 0; }

 

2.將d對10求對數

注意到log10(10) = 1, log10(100) = 2, log10(1000) = 3, 實際位數為log10(d) + 1 ;

而當d∈(100,1000)時,2 < log10(d) < 3,對log10(d)取整,求得2,也就是說實際位數為log10(d) + 1對於d不是10^n也成立。

於是,

#include <math.h>
#include <stdio.h>

int
main() { int d = 1000; int counter = (int)log10(d); printf("%d\n", counter); return 0; }

 

3.運行時間對比

測試1千萬次 ,運行結果:

計算得出結果耗時,方法1:約490ms,方法2:約70ms。可以看出方法2時間性能明顯優於方法1.

實際測試代碼:

int main()
{
    int d = 1000;
    int counter = 0;
    int n = 10000000;

    clock_t start = clock();
    while(n -- )
    {
        counter = (int)log10(d);
    }
    clock_t finish = clock();
    printf("%ldms, %d\n", finish  - start, counter);



    n = 10000000;
    start = clock();
    while(n --)
    {
        d = 1000;
        counter = 0;

        while(d)
        {
            counter ++;
            d /= 10;
        }
    }
    finish = clock();
    printf("%ldms, %d\n", finish  - start, counter - 1);

    return 0;
}

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM