描述: 输入两个用字符串 str 表示的整数,求它们所表示的数之和。
数据范围: 1 \le len(str) \le 10000 \1≤len(str)≤10000
输入描述:输入两个字符串。保证字符串只含有'0'~'9'字符
输出描述:输出求和后的结果
输入:
9876543210
1234567890
输出:
11111111100
def exam(stra,strb):
sa = list(map(int,[i for i in stra]))
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
sb = list(map(int,[i for i in strb]))
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# print(sa,'===',sb)
sc = []
left = 0
# 相同位数,逢10进1;不相同位数在遍历时候,要找长度长的遍历
length = 0
if len(sa) > len(sb):
length = len(sa)
else:
length = len(sb)
for i in range(length):
# 在遍历长的length情况下:
# 字符列表a和b都没遍历完毕,都有值,则需要从后往前,每个都加
if i < len(sa) and i < len(sb):
# print('okk:',i,sa[-(i+1)],sb[-(i+1)],left)
# okk: 0 1 9 0
temp = sa[-(i+1)] + sb[-(i+1)] + left
# left为逢十进1判断,每次i遍历时候发现有大于10的,则需记录left
# print(temp)
# 10
left = 0
if temp < 10:
sc.append(temp)
else:
# 相加时为数字,截取后一位则转字符串了,其实也可以用除以10求余数方式
sc.append(list(map(int,str(temp)[1]))[0])
left += list(map(int,str(temp)[0]))[0]
# print('1===',sc)
# 遍历的i值大于字符列表a,则说明a已经没有字符了,则temp只需要加strb即可
# stra和strb下面两个if可组合一起,就没处理了,先实现,后优化。。。
if i >= len(sa):
temp = sb[-(i+1)] + left
left = 0
if temp < 10:
sc.append(temp)
else:
sc.append(list(map(int,str(temp)[1]))[0])
left += list(map(int,str(temp)[0]))[0]
# print('2:===',sc)
if i >= len(sb):
temp = sa[-(i+1)] + left
left = 0
if temp < 10:
sc.append(temp)
else:
sc.append(list(map(int,str(temp)[1]))[0])
left += list(map(int,str(temp)[0]))[0]
# print('3:===',sc)
# stra和strb左侧第一位如果还有left,则直接append即可
if left == 1:
# sc[-1] = sc[-1] + 1
# print('4:===',sc)
sc.append(left)
# 每个i位置都加了结果后,需要倒序,因为list为append加后面
# [::-1]为倒序,不需要用reverse=True,reverse是从大到小从小到大排序这种,会打乱
# [::-1]为特殊形式的排序,12345/54321这种reverse才和【::-1】一致
sc = ''.join(list(map(str,sc))[::-1])
print(sc)
stra = input().strip()
strb = input().strip()
exam(stra,strb)