题目描述
输入两个用字符串 str 表示的整数,求它们所表示的数之和。
数据范围: 1 ≤ l e n ( s t r ) ≤ 10000 1 \le len(str) \le 10000 1≤len(str)≤10000
输入描述
输入两个字符串。保证字符串只含有’0’~'9’字符
输出描述
输出求和后的结果
代码&思路
- 在现实中做竖式运算的时候,也是上长下短比较方便,因此初步思路是先判断出两个整数的长短。
- 竖式运算关键在于进位,用列表记录两个整数的每一位数,并且长的那个整数一并记录进位标志。0不进位,1进位。由于运算是从个位开始,因此列表还需要逆序处理。
- 细分运算过程中可能会遇到的情况,从个位/列表第一个数开始做加法。大分类是分两个整数长度相同和长度不同两种情况
- 两个整数的每一位与该位的进位标识对应相加,更新下一位的进位标志,以及相加后的当前位置的数值。要注意长整数的最后一位若需进位,结果还需要进1
- 而对于两个整数长度不等的情况,还要处理超出短整数位数但不是长整数最后一位的情况
s1,s2=input(),input()
n1,n2=len(s1),len(s2)
# 判断位数多的那个大数
if n1<n2:
tmp=s1
s1=s2
s2=tmp
n1,n2=len(s1),len(s2)
# 0不进位 1进位 从个位开始相加
a=[[int(x),0] for x in s1]
b=[int(x) for x in s2]
a.reverse()
b.reverse()
# n1==n2
if n1==n2:
for i in range(n2):
if i<n2-1:
if a[i][0]+b[i]+a[i][1]>=10:
a[i+1][1]=1
a[i][0]=a[i][0]+b[i]+a[i][1]-10
else:
a[i][0]=a[i][0]+b[i]+a[i][1]
else:
if a[i][0]+b[i]+a[i][1]>=10:
a[i][0]=a[i][0]+b[i]+a[i][1]-10
a.append([1,0])
else:
a[i][0]=a[i][0]+b[i]+a[i][1]
if n1>n2:
for i in range(n2):
if a[i][0]+b[i]+a[i][1]>=10:
a[i+1][1]=1
a[i][0]=a[i][0]+b[i]+a[i][1]-10
else:
a[i][0]=a[i][0]+b[i]+a[i][1]
for i in range(n2,n1,1):
if i<n1-1:
if a[i][0]+a[i][1]>=10:
a[i][0]=a[i][0]+a[i][1]-10
a[i+1][1]=1
else:
a[i][0]=a[i][0]+a[i][1]
else:
if a[i][0]+a[i][1]>=10:
a[i][0]=a[i][0]+a[i][1]-10
a.append([1,0])
else:
a[i][0]=a[i][0]+a[i][1]
a.reverse()
for i in range(len(a)):
print(a[i][0],end='')