为什么下面的 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
正确地得到相同的数字,但删除了最后一位数字。
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
正确地得到相同的数字,但删除了最后一位数字。