给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = “11”, num2 = “123” 输出:“134”
示例 2:输入:num1 = “456”, num2 = “77” 输出:“533”
示例 3:输入:num1 = “0”, num2 = “0” 输出:“0”
提示:
1 <= num1.length, num2.length <= 104 num1 和num2 都只包含数字 0-9 num1 和num2
都不包含任何前导零
提示:题目链接放这里
思路:
- 首先将字符串反转;
- 考虑两数相加是否有进位位;
- 有进位时将进位位保留并以字符串的形式输出;
- 分别考虑两位数位数相同时和不同时的输出情况;
- 最后以字符串的形式输出。
class Solution {
public:
string addStrings(string num1, string num2) {
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
int i,j,sign;
i=j=0;
sign=0;
string result;
while(i<num1.size()&&j<num2.size())
{
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=num2[j]-'0';
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
}else sign=0;
result.push_back(sum+'0');
i++;
j++;
}
while(i<num1.size())
{
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=0;
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
} else sign=0;
result.push_back(sum+'0');
i++;
}
while(j<num2.size())
{
int a=0,b=0;
int sum=0;
b=num2[j]-'0';
a=0;
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
} else sign=0;
result.push_back(sum+'0');
j++;
}
if(sign>0)
result.push_back(sign+'0');
reverse(result.begin(),result.end());
return result;
}
};
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=num2[j]-'0';
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
}else sign=0;
while(i<num1.size()&&j<num2.size())
{
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=num2[j]-'0';
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
}else sign=0;
result.push_back(sum+'0');
i++;
j++;
}
while(i<num1.size())
{
int a=0,b=0;
int sum=0;
a=num1[i]-'0';
b=0;
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
} else sign=0;
result.push_back(sum+'0');
i++;
}
while(j<num2.size())
{
int a=0,b=0;
int sum=0;
b=num2[j]-'0';
a=0;
sum=a+b+sign;
if(sum>=10){
sum-=10;
sign=1;
} else sign=0;
result.push_back(sum+'0');
j++;
}
if(sign>0)result.push_back(sign+'0');
reverse(result.begin(),result.end());
return result;