题目
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解法
- 从两个字符串的最后面开始计算,字符串1个位的数字+字符串2个位的数字
- 两个数字相加,注意从后面来的进位,和自己可能产生的进位
- 当一个字符串比另一个长时,多出来的字符还是要拼接上去
- 注意最后是否存在进位,若有需要添加
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
string addStrings(string num1, string num2) {
string res="";
int len1 = num1.size(),len2 = num2.size();
int c = 0;
while(len1&&len2){
int tmp = num1[len1-1]-'0' +num2[len2-1]-'0'+ c;
c = tmp/10;
tmp %= 10;
res.push_back('0'+tmp);
len1--;len2--;
}
while(len1){
int tmp =num1[len1-1]-'0'+ c;
c = tmp/10;
tmp %= 10;
res.push_back('0'+tmp);
len1--;
}
while(len2){
int tmp =num2[len2-1]-'0'+ c;
c = tmp/10;
tmp %= 10;
res.push_back('0'+tmp);
len2--;
}
if(c==1)
res.push_back('0'+1);
reverse(res.begin(), res.end());
return res;
}
};
int main()
{
string s1 = "0";
string s2 = "96";
Solution s;
cout<<s.addStrings(s1, s2);
}
今天也是爱zz的一天哦!