美文网首页
[leecode题目]超大整数相加Python实现

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

作者: xcrossed | 来源:发表于2021-05-22 22:47 被阅读0次

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

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

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

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

    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

    可以说是非常简单了

    相关文章

      网友评论

          本文标题:[leecode题目]超大整数相加Python实现

          本文链接:https://www.haomeiwen.com/subject/kjzojltx.html