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

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

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

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

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

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

可以说是非常简单了

你可能感兴趣的:([leecode题目]超大整数相加Python实现)