我嘗試編寫一個函數來計算數字位數,順便說一下,我嘗試比較不同方式的效率。 1. lenstr(ⅰ)的方法:不同效率的數字數字計數與蟒蛇&C
def nDigits(i):
return len(str(i))
for i in range(100000):
print nDigits(i)
約需143.75s
2.日誌10方式:
import math
def nDigits(i):
if i > 0:
n = int(math.log10(i)) + 1
elif i == 0:
n = 1
else:
n = int(math.log10(-i)) + 2
return n
for i in range(100000):
print nDigits(i)
約需144.35s
3。劃分方式:
def nDigits(i):
t = 0
while i > 0:
t += 1
i /= 10
return t
for i in range(100000):
print nDigits(i)
大約需要143.43s
4.分裂方式在C:
#include<stdio.h>
int digits(int num){
int i = 0;
while (num > 0){
i += 1;
num /= 10;
}
return i;
}
void main(){
int i = 0;
while (i < 100000){
i += 1;
printf("%d",digits(i));
}
}
大約需要0.07s
是對C比Python的更好的2000倍......或者是有python更好的方法來計數數字。 thx傢伙,PLZ幫助我。
'elif i = 0'會產生語法錯誤。 – Blender 2013-03-11 02:36:14
您使用的是什麼版本的Python?你如何運行它?請注意,印刷實際上是需要最多時間的事情,而不是計算,至少對我而言是這樣。你有沒有嘗試'爲我在xrange(100000):nDigits(i)'? – cge 2013-03-11 02:53:28
您忽略了這種方法:http://stackoverflow.com/a/3069580/1553090 - 您可以通過安排「if」語句以二進制格式進一步改進。這樣你最多可以進行大約3次比較(噢,答案實際上包含了最後的結果)。 – paddy 2013-03-11 04:14:02