[HDU1002]大数求和问题
今天是我第一次使用hdu平台,首先尝试做了1002大数求和问题。感觉这道题目还是很简单的,将大整数按位转化为char型即可。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int line;
char a[1002],b[1002],sum[1002];
int i,j,k,j1,j2;
int flag=0;
char c;
int ia,ib;
scanf("%d",&line);
for(i=0;i<line;i++)
{
printf("Case %d:\n",i+1);
memset(a, '\0', sizeof(a));
memset(b, '\0', sizeof(b));
memset(sum, 0, sizeof(sum));
flag=0;
while((c=getchar())>'9'||c<'0');
for(j1=0;c<='9'&&c>='0';j1++,c=getchar())
{
a[j1]=c;
if(a[0]=='0')j1--;
}
if(a[0]=='0')j1++;
while((c=getchar())>'9'||c<'0');
for(j2=0;c<='9'&&c>='0';j2++,c=getchar())
{
b[j2]=c;
if(b[0]=='0')j2--;
}
if(b[0]=='0')j2++;
printf("%s + ",a);
printf("%s = ",b);
j1--;
j2--;
if(j1>j2)j=j1;
else j=j2;
while(j1>=0&&j2>=0)
{
ia=a[j1]-'0';
ib=b[j2]-'0';
if(ia+ib+flag>=10)
{
sum[j]=ia+ib+flag-10+'0';
flag=1;
}
else
{
sum[j]=ia+ib+flag+'0';
flag=0;
}
//printf("\nflag=%d\n",flag);
j1--;
j2--;
j--;
}
while(j1>=0)
{
ia=a[j1]-'0';
if(ia+flag>=10)
{
sum[j]=ia+flag-10+'0';
flag=1;
}
else
{
sum[j]=ia+flag+'0';
flag=0;
}
j1--;
j--;
}
while(j2>=0)
{
ib=b[j2]-'0';
if(ib+flag>=10)
{
sum[j]=ib+flag-10+'0';
flag=1;
}
else
{
sum[j]=ib+flag+'0';
flag=0;
}
j2--;
j--;
}
if(flag==1)
printf("1");
printf("%s\n",sum);
if(i<line-1)printf("\n");
}
}
需要注意的是每次算完一个case,要用memset函数清空字符串;
对于000786543……这类的数字要先去掉0。
总体来讲还是比较简单的一题呢:D

浙公网安备 33010602011771号