對於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; }
運行結果: