题解 | #高精度整数加法#
高精度整数加法
https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s1,s2;
cin>>s1>>s2;
int i=s1.size()-1;
int j=s2.size()-1;
int flag=0;//flag是进位
vector<int>res;
for(i,j;i>=0||j>=0;i--,j--){
int num1=i>=0?s1[i]-'0':0;//转化成数字计算。如果i或者j>0,就直接转化为对应的数字,如果其中一个<0了,说明对应的字符串加完了,另一个还没加完,就要用0来填补数字的空位
int num2=j>=0?s2[j]-'0':0;
if(num1+num2+flag>=10){
res.push_back((num1+num2-10)+flag);
flag=1;
}
else{
res.push_back(num1+num2+flag);
flag=0;
}
//cout<<"i="<<i<<",j="<<j<<",num1="<<num1<<",num2="<<num2<<",flag="<<flag<<endl;;
}
if(flag==1){res.push_back(flag);}
reverse(res.begin(),res.end());
for(int i=0;i<res.size();i++){
cout<<res[i];
}
cout<<endl;
}
// 64 位输出请用 printf("%lld")
要注意做加法时判断循环的条件,i和j为想加的两个字符串的字符下标,只要其中一个还没走完就要继续做加法,比如说i=2,j=0,下一个循环应该计算s1[1]+0的值了,循环继续,所以条件是||