题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
//说好的字符串长度1000以内呢,骗我用int,然后我又改成longlong,最后发现还是得用string
//思路就是用add来标识是否进位,如果用string就不用每次把数字乘10的标记了
//然后按照短字符串的长度倒序加法结束后,再循环加上长字符串剩余的部分(这里注意add一直要在)
//最后还要判断add还有没有最后一个进位
#include <iostream>
#include <string>#include <algorithm>
using namespace std;
int main()
{
string str1,str2;
cin >> str1 >> str2;
int add = 0,i,j;
string sum;
for(i = str1.size()-1,j = str2.size()-1;i>=0&&j>=0;--i,--j){
if(((str1[i]-'0')+(str2[j]-'0')+add)>=10){
sum = to_string((str1[i]-'0')+(str2[j]-'0')+add-10)+sum;
add = 1;
}
else{
sum = to_string((str1[i]-'0')+(str2[j]-'0')+add)+sum;
add = 0;
}
}
while(i>=0||j>=0){
if(i>=0){
if((str1[i]-'0'+add)>=10){
sum = to_string(str1[i]-'0'+add-10)+sum;
add = 1;
}
else{
sum = to_string(str1[i]-'0'+add)+sum;
add = 0;
}
}
if(j>=0){
if((str2[j]-'0'+add)>=10){
sum = to_string(str2[j]-'0'+add-10)+sum;
add = 1;
}
else{
sum = to_string(str2[j]-'0'+add)+sum;
add = 0;
}
}
--i;
--j;
}
if(add == 1)sum="1"+sum;
cout << sum << endl;
return 0;
}