簡體   English   中英

計算數字中的數字總和,使用/和%時結果不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM