为什么以下python digitSum代码给出了错误的答案?

时间:2016-02-17 18:21:57

标签: python-3.x sum digit

digitSum=0
n=222222222222222222222222222222
while n!=0:
    digitSum=digitSum+(n%10)
    n=int(n/10)
print(digitSum)

输出应为60,而输出为86。

2 个答案:

答案 0 :(得分:1)

这也应该有用。

digitSum=0
n=222222222222222222222222222222
stringValue = str(n)
length = len(stringValue)
digitSum = length * int(stringValue[0])
print(digitSum)

答案 1 :(得分:0)

使用a // b进行整数除法,而不是int(a / b)

在循环的第一次迭代中,您的代码正在有效地执行int(222222222222222222222222222222 / 10)。这会产生一个浮点值,您希望它是22222222222222222222222222222.2,但由于浮点精度的限制,实际上是22222222222222223739180810240.0。此值传播到算法的下一次迭代,显然会导致错误的答案。

另一方面,Python中的//执行整数除法,这会导致所需的截断结果。因为Python具有无限的整数范围,即使数字非常大,这也能正常工作。因此222222222222222222222222222222 // 10正确导致删除最后一位数字的相同数字。