√
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
class Solution {
public:
string addStrings(string num1, string num2) {
int a1 = num1.size();
int b1 = num2.size();
while(a1<b1)
{
num1='0'+num1;
a1++;
}
while(a1>b1)
{
num2='0'+num2;
b1++;
}
for (int i= a1-1; i>0 ; i--)
{
int temp = num1[i]-'0'+num2[i]-'0';
num1[i] = temp%10+'0';
num1[i-1] += temp/10;
}
num1[0]=num1[0]-'0'+num2[0]-'0';
if (num1[0]<10)
{
num1[0]+='0';
return num1;
}
if (num1[0]>=10)
{
num1[0]=num1[0]%10+'0';
num1.insert(num1.begin(),'1');
}
return num1;
}
};
别人的:
class Solution {
public:
string addStrings(string num1, string num2) {
string ret;
int carry = 0;
for(int i = num1.size() - 1, j = num2.size() - 1; i >= 0 || j >= 0; i--, j--)
{
int sum = carry;
sum += (i >= 0) ? num1[i] - '0' : 0;
sum += (j >= 0) ? num2[j] - '0' : 0;
ret.insert(ret.begin(), '0' + sum % 10);
carry = sum / 10;
}
if(carry == 1)
ret.insert(ret.begin(), '1');
return ret;
}
};