FAQ | About Virtual Judge | Forum | Discuss | Open Source Project
All Copyright Reserved ©2010-2014 HUST ACM/ICPC TEAM
Anything about the OJ, please ask in the forum, or contact author: Isun
Server Time:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int max(int la,int lb) //c的数学函数库中无此函数和min()
{
if(la>lb)
return la;
return lb;
}
int main()
{
int t,i,j,k=0,c[1111],num1[1111],num2[1111],la,lb,l,cnt;
char a[1111],b[1111];
scanf("%d",&t);
while(t--)
{
getchar(); //gets()函数可吸收一行字符包括\n 因此在gets之后如果再有字符型的输入函数则不用加getchar()
scanf("%s%s",a,b);// 但是scanf就要加了 否则就会将回车当成下一个输入
la=strlen(a);
lb=strlen(b);
memset(num1,0,sizeof(num1));//数组清0后可以统一操作 如两个长短不相同的与长短相同程序统一 不用在分类讨论
memset(num2,0,sizeof(num2)) ;
memset(c,0,sizeof(c));
for(i=0;a[i]!='\0';++i) //将数组倒序排列方便操作 序号对不好时举个例子 如i=0
{
num1[i]=a[la-1-i]-'0';
}
for(i=0;b[i]!='\0';++i)
{
num2[i]=b[lb-1-i]-'0';
}
l=max(la,lb);
cnt=0;
for(i=0;i<=l ;++i) //主干程序 模拟大数相加 将其分解为一位数字的相加与进位两步 主要利用循环思想 就是找规律
{
c[i]=num1[i]+num2[i]+cnt;
if(c[i]>9)
{
c[i]-=10;
cnt=1;
}
else
{
cnt=0;
}
}
while(c[i]==0)
{
--i;
}
++k;
printf("Case %d:\n",k);
printf("%s + %s = ",a,b);
for(j=i;j>=0;--j)
{
printf("%d",c[j]);
}
if(t>0)
printf("\n"); //格式应当注意想好之后再提交 不能应为小问题失掉比赛
printf("\n");
}
return 0;
}