开发者社区> 问答> 正文

python两个大数之和?

python两个大数之和?

比如两个超出int64位数的如何进行求和?

展开
收起
天枢2020 2020-03-13 09:46:49 561 0
1 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下:

    思路:

    1.将超长数转换成字符串

    2.进行长度补零,即让两个要计算的字符串长度一样。

    3.将两个字符串,分解成列表,并进行翻转(翻转后,个位在前,目的,从个位往高位计算)

    4.创建一个长度与要计算的字符串长度相同的列表,元素填充为0.

    5.遍历列表,由于两个列表长度相同,遍历任何一个都可以。

    6.由于是10进制,所以两个值累加后与10进行比较,大于等于即有进位。

    sum_list = [0]
    
    a = "12345678"
    
    b = "3456785555"
    
    # 长度补零操作。
    if len(a) > len(b):
        lc = len(a) - len(b)
        b = '{}{}'.format(r'0' * lc, b)
    elif len(a) < len(b):
        lc = len(b) - len(a)
        a = '{}{}'.format(r'0' * lc, a)
    
    # 初始化长度与计算长度相同,零填充
    sum_list = sum_list * len(a)
    
    # 所以位数,翻转,即从各位向前计算
    str1 = list(a[::-1])
    
    str2 = list(b[::-1])
    
    # 位置累加进位。
    for i, v in enumerate(str1):
        # sum_list[i] 为进位,所以每次加上进位
        v_add = int(str2[i]) + int(v) + sum_list[i]
        if v_add >= 10:
            m, va = divmod(v_add, 10)
            sum_list[i] = va
            sum_list[i + 1] = m
        else:
            # 没有进位,无需累加,直接写值
            sum_list[i] = v_add
    
    # 计算完成,翻转,转成字符串。
    print(''.join('%s'% vi for vi in sum_list[::-1]))
    

    结果:image.png

    2020-03-13 09:47:41
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载