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

Why does the following python digitSum code gives the wrong answer?

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

输出应该是60,而输出是86。

这应该也行。

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

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

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

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