您的位置:首页 > 其它

Hdu1002 A+B ProblemII(大数相加模拟)

2014-02-26 19:22 323 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002

#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;

int t;
char a[1001],b[1001];
int sum[2000];
int la,lb,tmp;

int idx(char x){
return x-'0';
}
//进位以后还要复原。所以进位也不能进在a跟b上,就只能进在sum上面

int main (){

cin>>t;
int c=1;
while(t--){

char *ls,*ss;
int l,s;
cin>>a+1>>b+1;//腾出一个空位给进位
b[0]=a[0]='0';
la=strlen(a+1);
lb=strlen(b+1);//注意strlen(a)返回值是0

if(la>lb)
{
ls=a;l=la;
ss=b;s=lb;
}
else
{
ls=b;l=lb;
ss=a;s=la;
}

memset(sum,0,sizeof(sum));
for(int i=l,j=s;j>0;i--,j--)
{
tmp=sum[i]+idx(ls[i])+idx(ss[j]);
if(tmp>=10)
{
tmp-=10;
sum[i-1]++;
}
sum[i]=tmp;
}
for(int i=l-s;i>=0;i--)
{
sum[i]+=idx(ls[i]);
if(sum[i]>=10)//显然i=0的时候肯定否
{
sum[i]-=10;
sum[i-1]++;
}
}

cout<<"Case "<<c++<<":\n"
<<a+1<<" + "<<b+1<<" = ";

if(sum[0]!=0)
cout<<sum[0];
for(int i=1;i<=l;i++)
cout<<sum[i];
if(t==0)//如果是最后一次输出了
cout<<endl;
else
cout<<endl<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: