思路:以前大一的时候写过大数a+b,只不过那个时候写的比较复杂的感觉,现在是用字符串模拟,直接字符串a和b中每一位反过来存数组中,然后直接每一位相加,如果加的和大于10,下一位加1,本位求余10,最后从后往前遍历一遍ans数组找到最高位的位置,然后再将答案输出即可。
#include<bits/stdc++.h>
using namespace std;
string a,b;
int x[1010],y[1010],ans[1010];
int main()
{
cin>>a>>b;
int k1=0,k2=0;
memset(ans,0,sizeof(ans)); //初始化答案数组为零
for(int i=a.length()-1;i>=0;i--){
//将字符串a中每一位从后往前存到数组x中
x[k1++] = a[i]-'0';
}
for(int i=b.length()-1;i>=0;i--){
//将字符串b中每一位从后往前存到数组x中
y[k2++] = b[i]-'0';
}
for(int i=0;i<1010;i++){
//模拟加法
ans[i] = ans[i]+x[i]+y[i];
if(ans[i]>=10){
ans[i+1] = ans[i+1]+1;
ans[i] = ans[i]%10;
}
}
int s = -1;
for(int i=1010;i>=0;i--){
//找到相加后最高位的位置
if(ans[i]>0){
s = i;break;
}
}
if(s==-1){
cout<<0<<endl;} //特判 0+0 = 0的情况
else {
for(int i=s;i>=0;i--){
cout<<ans[i];
}
cout<<endl;
}
return 0;
}