python进行两个大数相加

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

思路:

[En]

Train of thought:

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]))

结果:

[En]

Results:

Original: https://www.cnblogs.com/yhleng/p/11969180.html
Author: _天枢
Title: python进行两个大数相加

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6652/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总