题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
思路分析:模拟竖式加法
从num1和num2的最低位开始计算,计算 x + y + carry,carry记录每轮计算自低位的进位。
对于长度不一的字符串,要用0补齐。
class Solution:
def addStrings(self,num1,num2):
num1 = list(num1)
num2 = list(num2)
ret = ''
carry = 0
i = len(num1) - 1
j = len(num2) - 1
# carry等于1 考虑到i/j指针都移动到头但仍要进位的情况
while i >= 0 or j >= 0 or carry == 1:
if i >= 0:
x = int(num1[i])
else:
x = 0
if j >= 0:
y = int(num2[j])
else:
y = 0
# 计算该位的值
ret = ret + str((x+y+carry) % 10)
# 计算进位
carry = int((x+y+carry) / 10)
i = i - 1
j = j - 1
return ret[::-1]