因为是大数,所以不能:将string转为int,进行相加后,再int转为string。
而是直接模拟加法过程。
一些细节:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
int n1 = s.size();
int n2 = t.size();
if(n1 == 0)
return t;
if(n2 == 0)
return s;
reverse(s.begin(), s.end());
reverse(t.begin(), t.end());
int n; //取小的
string ans; //取长的
if(n1 < n2){
n = n1;
ans = t;
}
else{
n = n2;
ans = s;
}
int flag = 0;
//相同部分
for(int i = 0; i < n; i++){
int temp = s[i] - '0' + t[i] - '0' + flag;
flag = temp / 10;
temp = temp % 10;
ans[i] = temp + '0';
}
//多出部分
for(int i = n; i < ans.size(); i ++){
int temp = ans[i] - '0' + flag;
flag = temp / 10;
temp = temp % 10;
cout<<temp<<endl;
ans[i] = temp + '0';
}
//最后,如果进位flag还是1,还需要
if(flag == 1)
ans = ans + "1"; //string可以直接用“+”拼接
reverse(ans.begin(), ans.end());
return ans;
}
};
?值得采用的点:
?