アイデア:新入生の年に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;
}