大数相加 高精度加法 模版 第二课

190 阅读1分钟

模板题 大数相加: 791. 高精度加法 - AcWing题库

无语了,函数名没写,调试进不去函数半天我竟然看不见:

image.png


#include<iostream>
#include<vector>
using namespace std;


const  int  N = 1e6+10;

//c=a+b
vector<int> sum(vector<int>& a,vector<int>&b)//引用是为了提高效率,尽可能不调用拷贝构造
{
    vector<int> c;//vector存储我们的和
    
     int t=0;//进位
    
    for(int i=0;i<a.size()||i<b.size();i++)
    {
        //开始相加
       
        
        if(i<a.size()) t+=a[i];
        if(i<b.size()) t+=b[i];
        
    //     98765
    // +   54321
    // ____________
    
        //这个时候t里面即有了a,b的和还有进位的值
        
       c.push_back(t%10);//留下个位数  
        
        t/=10;  //比如个位数 5+1=6 6/10=0,说明不用进位  如果9+9=18,18/10=1,说明需要进1位
        
        
    }
        if(t)  //循环都结束了,t还等于1,那就再往前进1,例如 99+11=110
          c.push_back(1);
 return c;

    }



int main()
{
    
    string a,b;  //a和b是大数,用string存一下
    cin>>a>>b;
    
    vector<int> v1;
    vector<int> v2;
    //假如a是   '12345'   b是'56789'
    
    
    //倒着遍历   '1234567'
    
    for(int i=a.size()-1;i>=0;i--)   //54321
    {
      v1.push_back(a[i]-'0');
    }    
     
 //倒着遍历   '56789'
    for(int i=b.size()-1;i>=0;i--)   //98765
    {
        v2.push_back(b[i]-'0');
    }
     
     
    vector<int> c=sum(v1,v2);
    
    
    //打印  这个就按照我们日常习惯,从前往后打印即可
    for(int i=c.size()-1;i>=0;i--)
    {
        printf("%d",c[i]);
    }
    
    
    return 0;
    
 
}

image.png