您的位置:首页 > 其它

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

2016-10-07 10:07 399 查看
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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: