写了个高精度加法板子

发布时间 2023-11-10 18:10:49作者: C。C

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+9;
int a1[1000],b1[1000],ans[1000];
void add(int a[],int b[],int na,int nb){
int t=0;
if(na<nb)return add(b,a,nb,na);
for(int i=0;i<na;i++){
t+=a[i];
if(i<nb)t+=b[i];
ans[i]=t%10;
t/=10;
}
if(t)ans[na]++;
if(t)
for(int i=na;i>=0;i--){
printf("%d",ans[i]);
}
else for(int i=na-1;i>=0;i--){
printf("%d",ans[i]);
}
}
int main()
{
   char a[1000],b[1000];
scanf("%s%s",a,b);int na=strlen(a),nb=strlen(b);
for(int i=strlen(a)-1;i>=0;--i){
a1[na-i-1]=a[i]-'0';
}
for(int i=strlen(b)-1;i>=0;--i){
b1[nb-i-1]=b[i]-'0';
}
add(a1,b1,na,nb);

    return 0;
}

#include<bits/stdc++.h>  
using namespace std;  
const int N=1e4+9;  
vector<int> add(vector<int>&a, vector<int>&b){
    //含有前导0时,54321和43210000,从“尾部”开始相加,没有任何影响
    if(a.size()<b.size())return add(b,a);
    vector<int> c;int n=a.size();int t=0;
    for(int i=0;i<n;++i){
        if(i<b.size())t+=b[i];
        t+=a[i];
        c.push_back(t%10);
        t/=10;
    }
    if(t)c.push_back(1);
    return c;
    
}
int main(){
    //ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    string a1,b1;
    cin>>a1>>b1;
    vector<int> a,b;
    for(int i=a1.size()-1;i>=0;i--){
        a.push_back(a1[i]-'0');
    }
    for(int i=b1.size()-1;i>=0;i--){
        b.push_back(b1[i]-'0');
    }
    //倒序输入如12345被存为54321
    
    for(int i=add(a,b).size()-1;i>=0;--i){
        cout<<add(a,b)[i];
    }
    
    return 0;  
}