[leecode题目]超大整数相加Python实现

108 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情


超过一定长度的整数相加会溢出,那怎么实现超大整数数相加呢?

可能有人说,直接相加不行么,可能真不行,超过了类型长度会溢出

答案是用字符串来表示大整数,对齐位数逆排序后,按位相加,处理进位,就可以实现.

具体算法实现,请看代码.

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

可以说是非常简单了