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]))
结果: