给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
思路
和之前的二进制求和类似,采用一个进位(carry)
python 3 代码
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
i,j,carry=len(num1)-1,len(num2)-1,0
res=''
while(i>=0 or j>=0):
n1=int(num1[i]) if i>=0 else 0
n2=int(num2[j]) if j>=0 else 0
temp=n1+n2+carry
carry=temp//10
res=str(temp%10)+res
i,j=i-1,j-1
if (carry):
res+='1'
return res
这个代码利用ASCII码计算 没有采用转换str<-->int
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
i = len(num1)-1
j = len(num2)-1
res = ""
carry = 0
while i >=0 or j >= 0:
n1 = num1[i] if i >= 0 else '0'
n2 = num2[j] if j >= 0 else '0'
temp = ord(n1) + ord(n2) - 2*ord('0') + carry
cur = temp%10
carry = temp//10
res = chr(cur+48) + res
i -= 1
j -= 1
return '1' + res if carry != 0 else res
c++ 代码
class Solution {
public:
string addStrings(string num1, string num2) {
int n1=num1.size();
int n2=num2.size();
while(n1>n2)
{
num2='0'+num2;
n2++;
}
while(n2>n1)
{
num1='0'+num1;
n1++;
}
string res=num1;
int carry=0;
for(int i=n1-1;i>=0;i--)
{
int sum=num1[i]-'0'+num2[i]-'0'+carry;
res[i]=sum%10+'0';
carry=sum/10;
}
if(carry==1)
{
res='1'+res;
}
return res;
}
};