python - 计算数字中的数字之和,使用/和%时结果不正确

标签 python math python-3.x

我正在练习 Project Euler,正在解决一个用 Python 计算 2 ** 1000 (2 ^ 1000) 中的数字总和的问题。我的代码

z = 2 ** 1000
print(z)

sum = 0
while z > 0:
    x = int(z % 10)
    sum += x
    z = z / 10

print(sum)

给出结果

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
1189

虽然Python能够计算出正确的z值,但z中的数字之和是错误的。为什么总和不正确?

最佳答案

令人惊讶的是,Python 2.7 和 3.3 给出了不同的结果。 2.7 给出的数字总和为 1366 和 3.3 1189。虽然您的程序在 Python 2.7 上是正确的,但您必须记住 the semantics of / have changed in Python 3 ,Python 3 上的整数除法运算符是 //;否则除以 10 会将数字转换为浮点型(并且损失精度)。因此

z = 2**1000
sum = 0
while z > 0:
    x = int(z % 10)
    sum += x
    z //= 10
print(sum)

Python 2.6 和 2.7 还可以通过启用新的除法运算符来使用它们

from __future__ import division

在每个文件的开头。

关于python - 计算数字中的数字之和,使用/和%时结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290035/

相关文章:

python-3.x - 在Windows 7上为Python3安装OpenCV之后,运行时错误R6034

Python 3.6.4 Arcade 模块窗口错误? {pyglet.gl.lib.GLException : b'invalid enumerant'}

JavaScript 指数

ruby - GSL 和相关性

python - 如何在 python 3.6 中打开混合编码的 unicode 文件?

python - 从 C++ 代码自动生成流程图

c - 在 C 中将数字相乘时打印的结果不正确

python - 无法通过 python 网络抓取从 HTML 文件中提取#document

python - 使用数组的前一个结果将许多二维数组乘以向量

python - 如何使用所有核心中的一些(数字)CPU核心,并具有tensorflow属性