我是python的新手,我想在python中添加两个非常大的数字,即使bignum也无法处理。我可以将这两个数字作为一个字符串,然后可以从结尾进行计算,就像我们以前在旧学校加法过程中所做的一样。我们可以把马车加到下一个数字上,依此类推。 请协助。
答案 0 :(得分:3)
这个问题似乎足以使圣诞节编码小吃变得有趣。
这是我使用Python中许多内置函数的实现。
reversed
用于迭代从右到左的数字序列,即就像我们在纸上进行计算时一样zip_longest
在序列的结尾处以零填充(因为我们会忽略纸上的数字)divmod
在单个调用中计算结转值和当前数字。 lstrip
删除了左边的零零散。但是,它不处理负数。
from itertools import zip_longest
def add(a, b):
out = []
a = [int(c) for c in str(a)]
b = [int(c) for c in str(b)]
carry = 0
for ca, cb in zip_longest(reversed(a), reversed(b), fillvalue=0):
carry, digit = divmod(ca + cb + carry, 10)
out.append(str(digit))
return "".join(reversed(out)).lstrip("0")
a = 9999 ** 29
b = 3725241 ** 9
assert add(a, b) == str(a + b)
答案 1 :(得分:0)
经过3个小时的工作,我实现了这一目标。 :)
def add_func(num1,num2):
res_list = []
number1 = str(num1)
number2 = str(num2)
length1 = len(str(number1))
length2 = len(str(number2))
if(length1 > length2):
while(length1 > length2):
number2 = '0' + number2
length2 += 1
if(length2 > length1):
while(length2 > length1):
number1 = '0' + number1
length1 += 1
i = max(length1,length2)
carry = 0
while(i > 0):
if(int(number1[i-1]) + int(number2[i-1]) + carry > 9):
result = str(int(number1[i-1]) + int(number2[i-1]) + carry)
res_list.insert(0,(result[-1]))
carry = 1
if(i==1):
result = str(int(number1[i-1]) + int(number2[i-1]) + carry)
res_list[0]= result
elif(int(number1[i-1]) + int(number2[i-1]) > 9):
result = str(int(number1[i-1]) + int(number2[i-1]))
res_list.insert(0,(result[-1]))
carry = 1
else:
result = str(int(number1[i-1]) + int(number2[i-1]) + carry)
res_list.insert(0,(result[-1]))
carry = 0
i -=1
final_output = ('').join(res_list)
return final_output
print(add_func(9999**29,3725241**9))