码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-29 11:29:55      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/jijiji/p/4845631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!