class Solution:
def solve(self , s , t ):
mlen = max(len(s), len(t))
// 取两者长度的最大值
// 在两个数字字符串的前面补0 比如'1'.zfill(3)='001'
s = s.zfill(mlen)
t = t.zfill(mlen)
// print(type(s),t)
carry = 0 # 相当于进位
res = ''
// 两个新的字符串 都是从后往前遍历 从前往后依次是个位到最高位的计算结果,所以结果也应该是反向输出
for i in range(-1, -mlen-1,-1):
// print(i,'i') i= (-1,-2.....,-mlen)
// 计算某一位加上carry carry相当于让这个数字变成下一个ascii码对应的数,
// ord()返回字符的ASCII值
// print('s[i]',s[i],'ord',ord(s[i]))
// print('t[i]',t[i],'ord',ord(t[i]))
// print('ord(0)',ord('0')) # 48
last = ord(s[i]) + ord(t[i]) - ord('0') + carry
print('lasr',last,chr(last))
# print('ord(9)',ord('9')) # 57
if last > ord('9'):
// 如果两者相加大于 57 则肯定是超过10的,所以需要-10 进位1
carry = 1
res += chr(last - 10)
// 然后再把这个字符添加到空字符串res中
// print('res1',res)
else:
carry = 0
res += chr(last)
// print('res',res,type(res))
if carry:
print('carry',carry)
res += str(carry)
print(res[::-1]) // 最后返回倒叙字符串
Solution().solve('21019','32149')
leetcode -字符串的大数加法
最新推荐文章于 2024-04-09 23:46:24 发布