超过一定长度的整数相加会溢出,那怎么实现超大整数数相加呢?
可能有人说,直接相加不行么,可能真不行,超过了类型长度会溢出
答案是用字符串来表示大整数,对齐位数逆排序后,按位相加,处理进位,就可以实现.
具体算法实现,请看代码.
big_a="919999999999999999999999999999999999990"
big_b="99999999999999999999999999999999999999999999999999"
#高位补0
if len(big_a)>len(big_b):
need_zero=len(big_a)-len(big_b)
big_b="{}{}".format(r"0"*need_zero,big_b)
elif len(big_a)<len(big_b):
need_zero=len(big_b)-len(big_a)
big_a="{}{}".format(r"0"*need_zero,big_a)
sum=[0]*(len(big_a)+1) #加上是为了解决高位相加有进位
# 翻转字符串
big_a=list(big_a[::-1])
big_b=list(big_b[::-1])
# 执行高位相加
for i,v in enumerate(big_a):
tmp_add=int(big_b[i])+int(v)+sum[i]
if tmp_add>=10: #有进位
q,r=divmod(tmp_add,10)
sum[i]=r #余数
sum[i+1]=q # 商
else:
sum[i]=tmp_add
# 重新翻转回来
sum=sum[::-1]
print("".join(str(v) for v in sum))
100000000000919999999999999999999999999999999999989
可以说是非常简单了
网友评论