字符串模拟两个大数相加(python实现)

问题:
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

思路:

1. 反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2. 对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3. 把两个正整数相加,一位一位的加并加上进位。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import time
L1 = "2649821731631836529481632803462831616487712734074314936141303241873417434716340124362304724324324324324323412121323164329751831"
L2 = "1232141045091731748365195814509145981509438583247509149821493213241431431319999999999999999999999999999999999999999999999999341344779"

startTime = time.time()

max_len = max(len(L1), len(L2))
l1 = L1.zfill(max_len)
l2 = L2.zfill(max_len)

a1 = list(l1)
a2 = list(l2)
a3 = [0] * (max_len + 1)

for index in range(max_len - 1, -1, -1):
index_sum = a3[index + 1] + int(a1[index]) + int(a2[index])
less = index_sum - 10
a3[index + 1] = index_sum % 10
a3[index] = 1 if less >= 0 else 0

if(a3[0] == 0):
a3.pop(0)

a33 = [str(i) for i in a3]
print(''.join(a33))
print('耗时{0}ms'.format(time.time() - startTime))