Skip to main content
 首页 » 编程设计

Python:对长数中的数字求和

2025年05月04日15xing901022

我想出了以下方法来对数字中的数字求和。它似乎适用于大约 10^23 以下的数字,但不适用于更高的数字。为什么它不适用于更高的数字?

x=0 
for i in range(0, 5000): 
      x+=((number/10**i)//1)%10 
print(x) 

请您参考如下方法:

抛开这是一种非常低效的数字求和方式,假设您使用的是 Python 3,请将条件 print 添加到循环中:

for i in range(0, 5000): 
    piece = ((number/10**i)//1)%10 
    if piece: 
        print(i, piece) 
    x+=((number/10**i)//1)%10 

然后您将能够看到哪里出错了。从 number = 10**24 开始,我得到输出:

0 4.0 
1 2.0 
24 1.0 
7.0 

您不会期待那些中间结果,对吧?现在您只需要弄清楚为什么您会得到它们 ;-)

短期类(class)是,当您应该进行整数计算时,您却在进行浮点计算。你立即偏离轨道(当 i 为 0 时):

>>> 10**24/10**0 
1e+24 
>>> _ // 1 
1e+24 
>>> _ % 10 
4.0 

这是为什么呢?因为 10**24 不能完全表示为二进制 float :

>>> from decimal import Decimal 
>>> Decimal(1e24) 
Decimal('999999999999999983222784') 

因此,为 1e24 存储的近似值的确切值为 999999999999999983222784,并且当除以 时确实留下 4 的余数>10。

要解决这个问题,只需坚持整数运算:

number = 10**24 
x=0 
for i in range(0, 5000): 
    x += number//10**i % 10 
print(x) 

打印 1。更有效率的是做,例如,

print(sum(int(ch) for ch in str(number)))