[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

posted @ 2017-03-09 16:44  李璐颖  阅读(273)  评论(0)    收藏  举报