超过一定长度的整数相加会溢出,那怎么实现超大整数数相加呢?
可能有人说,直接相加不行么,可能真不行,超过了类型长度会溢出
答案是用字符串来表示大整数,对齐位数逆排序后,按位相加,处理进位,就可以实现.
具体算法实现,请看代码.
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) 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 可以说是非常简单了