您的位置:首页 > 其它

大数加法

2016-10-23 15:13 239 查看
#include <iostream>
#include <string>
using namespace std;
int max(int &x , int &y){
if(x>y){
return x;
}
else{
return y;
}
}

int min(int &x , int &y){
if(x<y){
return x;
}
else{
return y;
}
}

int main(){
int T;
cin>>T;
string a,b,c,d,e;
int l1,l2,l3,l4,i,temp;
int count = 1;
int carry;
while(T--){
c="";//每次要把c,d字符串清零
d="";
cin>>a>>b;
l1=a.size();
l2=b.size();
l3=min(l1,l2);
l4=max(l1,l2);
if(a.size() > b.size()){//d代表较长数,e代表较短数
d=a;
e=b;
}
else{
d=b;
e=a;
}
carry = 0;
if(l3 == l4){//分类讨论两个数长度是否相同
for(i=l4-1;i>=0;i--){
temp =( a[i] - '0' + b[i] - '0' + carry) % 10;
carry = ( a[i] - '0' + b[i] - '0' + carry) / 10;
c.push_back(temp + '0');
}
if(carry!=0){
c.push_back(carry + '0');
}
}////分类讨论两个数长度是否相同
else{
for(i=l4-1;i>l4-l3-1;i--){
temp =( d[i] - '0' + e[i-(l4-l3)] - '0' + carry) % 10;//长度不同的两个数位数要对齐来加
carry = ( d[i] - '0' + e[i-(l4-l3)] - '0' + carry) / 10;
c.push_back(temp + '0');
}
for(;i>=0;i--){
temp = (d[i] - '0' + carry) % 10;
carry = (d[i] - '0' + carry) / 10;
c.push_back(temp + '0');
}
if(carry!=0){
c.push_back(carry + '0');
}
}
cout<<"Case "<<count<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
for(int j = c.size() - 1; j >= 0 ; j--){//push进时是从个位的,所以输出要倒序输出
cout<<c[j];
}
cout<<endl;
if(T != 0){//最后一组加法的换行符不能要
cout<<endl;
}
count++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: