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
(在互联网上找到了这个)。我认为问题可能与数字的大小有关,但我不确定。任何正确方向的点都将受到赞赏。提前谢谢!
答案 0 :(得分:4)
原因是math.pow(2,1000)
返回float
而不是int
。因此,操作num/10
会返回与预期不同的答案。
使用2 ** 1000
致电时,会返回预期答案。
答案 1 :(得分:1)
问题是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)))
答案 2 :(得分:0)
我说你的数字计算完全错了。它可以更容易实现:
import math
number = str(int(math.pow(2,1000)))
total = 0
for i in number:
total += int(i)
print(total) #1366
只需计算2 1000 的结果,将其转换为str
并通过数字进行总结。
答案 3 :(得分:0)
没有数学模块,基本上可以这样完成:
a=list(str(2**1000))
b=0
for i in range(0,len(a)):
b+=int(a[i])
print(b)