[蓝桥杯][算法提高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