【蓝桥杯】【VIP改善アルゴリズム】多数追加

ここに画像の説明を挿入
アイデア:新入生の年に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;
}

おすすめ

転載: blog.csdn.net/qq_43811879/article/details/107891223