[英]Project Euler #16 on Python
import math
def sumOfDigit(num):
sum_of_digits = 0
while num > 9:
sum_of_digits += num % 10
num = int(num/10)
sum_of_digits += num
return sum_of_digits
print sumOfDigit(math.pow(2,1000))
这就是我对Project Euler #16
想法,它对于较小的数字也可以正常工作。 但是当我尝试2 1000时 ,代码给了我1289.0
而不是答案1366
(在互联网上找到了)。 我认为问题可能与数字的大小有关,但我不确定。 正确方向的任何观点将不胜感激。 提前致谢!
问题是math.pow
返回一个浮点数,而对于那么大的数字,浮点精度不足以提供精确的答案。 像这样更改您的功能:
def sumOfDigit(num):
sum_of_digits = 0
while num > 9:
sum_of_digits += num % 10
num = num // 10 # use integer division // instead of /
sum_of_digits += num
return sum_of_digits
print(sumOfDigit(pow(2, 1000))) # use builtin pow or ** operator instead of math.pow
或更短:
print(sum(int(c) for c in str(2**1000)))
我会说您的数字计算完全错误。 可以轻松实现:
import math
number = str(int(math.pow(2,1000)))
total = 0
for i in number:
total += int(i)
print(total) #1366
只需计算2 1000的结果,将其转换为str
并通过数字求和即可。
没有数学模块,基本上可以这样完成:
a=list(str(2**1000))
b=0
for i in range(0,len(a)):
b+=int(a[i])
print(b)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.