您的位置:首页 > 其它

杭电acm 1002 A + B Problem II

2012-10-20 17:03 351 查看
显然的大数相加问题,可以想着转换为字符串来操作,选择字符数组而不是int或其他型的数组(整型数组无法对连续输入的数字进行划分,只能是每出现一个空格或换行符才能保存到一位)。把每位数字看作一个字符再进行操作。。。

具体程序已加上了注释……

#include<iostream>
//#include<fstream>
#include<string>
using namespace std;
int main()
{
//ifstream cin("1001.txt");
int n,num=1;
int i,j,k;
cin>>n;
while(n--)
{
string a,b;
char sum[1001];
cin>>a>>b;
int t,tt=0,t1;//tt保存进位为0或1;t1为两个对应数位上的数之和再和进位相加的结果(可能大于10)
for(k=0,j=b.size()-1,i=a.size()-1;i>=0&&j>=0;k++,j--,i--)//这里的是i>=0&&j>=0,不能用i>=0,j>=0
{
t1=a[i]-'0'+b[j]-'0'+tt;
tt=t1/10;
sum[k]=t1%10+'0';
}
if(i>=0&&j<0)//a的长度大于b
{
for(t=i;t>=0;t--,k++)
{
t1=a[t]-'0'+tt;
tt=t1/10;
sum[k]=t1%10+'0';
}
}
if(i<0&&j>=0)//a的长度小于b
{
for(t=j;t>=0;t--,k++)
{
t1=b[t]-'0'+tt;
tt=t1/10;
sum[k]=t1%10+'0';
}
}
if(tt)
sum[k++]='1';
cout<<"Case "<<num<<':'<<endl;
num++;
cout<<a<<' '<<'+'<<' '<<b<<' '<<'='<<' ';
for(j=k-1;j>=0;j--)
cout<<sum[j];
cout<<endl;
if(n!=0)
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: