【问题标题】:Why does the following python digitSum code gives the wrong answer?为什么以下 python digitSum 代码给出了错误的答案?
【发布时间】:2016-02-17 18:21:56
【问题描述】:
digitSum=0
n=222222222222222222222222222222
while n!=0:
    digitSum=digitSum+(n%10)
    n=int(n/10)
print(digitSum)

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

【问题讨论】:

  • 在你的循环中添加一个print(n),你会看到发生了什么:在第一次除法之后,n=22222222222222223739180810240

标签: python-3.x sum digit


【解决方案1】:

这应该也可以。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多