新手讲大数大数系列---加法

1.反转

2.求和

3.反转

比较简单,就是要细心

#include<iostream>
using namespace std;
void bigNumAdd(char *a,char *b,char *c){
    int len_a=strlen(a),len_b=strlen(b),len_c;
    int len=(len_a>len_b?len_b:len_a),flag=0;
    int len_m=(len_a>len_b?len_a:len_b);
    memset(c,'0',1005*sizeof(char)); //初始化 
    for(int i=0;i<len_a/2;i++){     //反转a,b 
        char t=a[i];
        a[i]=a[len_a-1-i];
        a[len_a-1-i]=t;
    }
    for(int i=0;i<len_b/2;i++){
        char t=b[i];
        b[i]=b[len_b-1-i];
        b[len_b-1-i]=t;
    }
    for(int i=0;i<len;i++){   //算长度相同的部分 
        int num=a[i]-'0'+b[i]-'0'+flag;
        flag=num/10;
        c[i]=num%10+'0';
    }
    if(len_a>len_b){      //算长度不同的部分 
        for(int i=len;i<len_a;i++){
            int num=a[i]-'0'+flag;
            flag=num/10;
            c[i]=num%10+'0';
        }
        if(flag>0) c[len_a]=flag+'0';
    }
    else if(len_a<len_b){
        for(int i=len;i<len_b;i++){
            int num=b[i]-'0'+flag;
            flag=num/10;
            c[i]=num%10+'0';
        }
        if(flag>0) c[len_b]=flag+'0';
    }
    else if(len_a==len_b)
        if(flag>0) c[len]=flag+'0';
    if(c[len_m]=='0') len_c=len_m;   //算结果的长度 
    else len_c=len_m+1;
    for(int i=0;i<len_c/2;i++){   //反转结果 
        char t=c[i];
        c[i]=c[len_c-1-i];
        c[len_c-1-i]=t;
    }
    for(int i=0;i<len_c;i++) cout<<c[i];   //输出结果 
    cout<<endl;
}
int main(){
    for(int i=0;i<5;i++){
        char a[1005],b[1005],c[1005];
        cin>>a>>b;
        bigNumAdd(a,b,c);
        //cout<<c<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/jijiji/p/4845631.html