[英]Calculating sum of digits in a number, incorrect result when using / and %
我在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上是正確的,但您必須記住/
的語義在Python 3中已更改 ,並且Python 3的整數除法運算符為//
; 否則,除以10會將數字轉換為float(並失去precision )。 從而
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
在每個文件的開頭。
而不是將總和串聯,將變化總和的值完全更改為x並不理想,因此寫sum = x而不是sum + = x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.