我正在解决一个解决2 ^ 1000位数之和的简单问题.我知道,解决方案非常简单; 但请看这段代码:
n=2**1000
sum=0
while n>0:
sum+=n%10
n=int(n/10)
print(n)
print(sum)
Run Code Online (Sandbox Code Playgroud)
以上片段给出了错误的答案.但是,如果我做了一个小改动:
n=2**1000
sum=0
while n>0:
sum+=n%10
n//=10 # changed
print(n)
print(sum)
Run Code Online (Sandbox Code Playgroud)
那么答案是对的.谁能告诉我这里的区别是什么?
(注意:这种差异仅适用于较大的值n.)
看起来你正在使用python3,//运算符执行整数除法,并且/运算符执行浮点除法,这在巨大的值上会失去精度.
例如:
>>> int((2**1000 / 49) * 49) == 2**1000
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |