使用算法在python上添加大数字,而不是使用标准计算

时间:2016-01-24 11:49:01

标签: python algorithm

我的老师给了我一个功课来做一个python程序,它增加了大量的数字,并使用标准的添加算法。 (我知道Python 3.x本身可以添加大数字,但我需要添加的方式)

以下是标准算法的示例:How to Add Large Numbers Using Column Addition

我试过做一个程序但是,我做不到。 我没有从StackOverflow找到满足我的任何答案。 这是我的马车,而不是完整的尝试,只能添加相同房间的数字(例如12和45,444和765,而不是1和134)。

n=str(raw_input("n:"))
m=str(raw_input("m:"))
k=0
res=''
if m>n:
    m,n=n,m
k=0
for i in range(len(n)-1,-1,-1):
    a=float(n[i])
    try:
        b=float(m[i])
    except:
        b=float(0)
    k=float(k)
    res+=str(int((a+b+k)%10))
    if a+b+k>9:
        k=1
    else:
        k=0
print(res[::-1])

P.S。我是Python的初学者,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以在m的开头添加零,并且您的代码也能正常工作,因为您要添加整数,应使用int()而不是float() 并且你需要在for循环之后将进位添加到结果中检查此代码

n=raw_input("n:")
m=raw_input("m:")
k=0
res=''
if len(m)>len(n):
    n,m = m,n #this will swap
k=0
m = "0" * (len(n)-len(m)) + m #append zeroes to m at the begining
for i in range(len(n)-1,-1,-1):
    a=int(n[i])
    b = int(m[i])
    k=int(k)
    res+=str(int((a+b+k)%10))
    if a+b+k>9:
        k=1
    else:
        k=0

#add the remainder
if (k !=0) :
    res += str(k)

print(res[::-1])

答案 1 :(得分:1)

Python有izip_longest - 函数,以填补缺少的0 s:

from itertools import izip_longest
n = raw_input("n:")
m = raw_input("m:")
k = 0
res = ''
for a, b in izip_longest(reversed(n), reversed(m), fillvalue='0'):
    k, z = divmod(int(a)+int(b)+k, 10)
    res = str(z) + res
if k:
    res = str(k) + res
print res