题目:
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
提示:
num1
和num2
的长度都小于 5100num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
题解:
首先要理解一件事就是,数字和数字字符串的区别:即个位在字符串的哪里。
- 当使用数字字符串的时候,个位数是字符串的最后一位,
- 两个字符串相加,因字符串长度不一,所以最好翻转过来,这样字符串的开始就变成了个位。
- 相加过程即定义一个k为0,然后将k和每个字符串的第n位相加,将k的个位放到新字符串中,十位下一次循环
int t=0;
for(i,j; i>=0 ;i--,j--)
{
if(i>=0) t+=num1[i]-'0';
if(j>=0) t+=num2[j]-'0';
nums.push_back('0'+t%10);
t=t/10;
}
代码:
class Solution {
public:
string addStrings(string num1, string num2) {
string nums="";
if(num1.size()<num2.size()){
swap(num1,num2);
}
int i=num1.size()-1;
int j=num2.size()-1;
int t=0;
for(i,j; i>=0 ;i--,j--)
{
if(i>=0) t+=num1[i]-'0';
if(j>=0) t+=num2[j]-'0';
nums.push_back('0'+t%10);
t=t/10;
}
if(t) nums.push_back('0'+t);
reverse(nums.begin(),nums.end());
return nums;
}
};