计算一个大数中的数字个数
我现在正在尝试做Project Euler的题目,其中一个问题是计算2的1000次方,并且要统计这个数字有多少位数。我可以很容易地计算出2的15次方,但计算2的1000次方时,结果是科学计数法表示的,这样就很难把数字的每一位加起来。
import math
def power(x):
y_p=1000*math.log(x,10.0)
y=math.pow(10,y_p)
return y
if __name__=="__main__":
ans=power(2)
a=str(ans)
print a
sum=0
for i in a:
if i == ".":
print "encountered ."
elif i == "e":
break
else:
sum=sum+int(i)
print sum
8 个回答
2
其他的回答主要讲的是如何把一个大数字的各个数字加起来,但如果你问的是怎么计算这个数字的位数,那么你只需要这样做:
largenumber=2*1000
int(math.log(largenumber,10)+1)
或者
len(str(largenumber))
3
其实,使用Python中的log(或者log10)方法更简单。log10的精度足够高,甚至可以瞬间计算出2的1000000次方,而不需要占用任何空间。
from math import log10
ans=int(1000*log10(2))+1
6
在Python中计算2的1000次方,可以用 2**1000
这个方式。使用像 math.log
和 math.pow
这样的浮点函数,结果可能会不准确。
下面是具体的做法:
l = str(2**1000)
digits = [int(digit) for digit in l]
print sum(digits)
第一行把这个数字转换成十进制的字符串。第二行则是对字符串里的每个字符进行循环,把它们变成一个数字列表。最后一行是把这些数字加起来并打印出来。