题目链接:
https://leetcode-cn.com/problems/add-strings/
这题非常的简单,只需要考虑三个问题
- 长度一样的加分
- 长度不一样的加分
- 进位
我是这样完成的,写的比较长这里主要是提供看简洁的写法第二份代码,写的非常优美。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string addStrings(string num1, string num2) {
string ans = "";
int pos1,pos2;
pos1 = num1.size() -1;
pos2 = num2.size()-1;
int sur = 0;
while(pos1>=0 || pos2>=0)
{
if(pos1>=0 && pos2>=0)
{
sur += num1.at(pos1) + num2.at(pos2) - 48 *2;
ans += sur%10 + 48;
sur /=10;
--pos1;
--pos2;
}
else if(pos1 >=0)
{
sur += num1.at(pos1) - 48 ;
ans += sur%10 + 48;
sur /=10;
pos1--;
}
else if(pos2 >=0)
{
sur += num2.at(pos2) - 48 ;
ans += sur%10 + 48;
sur /=10;
pos2--;
}
// cout<<ans<<endl;
}
if(sur != 0)
{
ans += sur +48;
}
for(int i = 0;i<ans.size()/2;i++)
{
swap(ans[i],ans[ans.size() -1-i]);
}
return ans;
}
};
int main(void)
{
Solution t;
cout<<t.addStrings("123","0");
return 0;
}
来自于力扣的官方题解代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int i = num1.length() - 1, j = num2.length() - 1, add = 0;
string ans = "";
while (i >= 0 || j >= 0 || add != 0) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans.push_back('0' + result % 10);
add = result / 10;
i -= 1;
j -= 1;
}
// 计算完以后的答案需要翻转过来
reverse(ans.begin(), ans.end());
return ans;
}
};