杭电ACM 1002 大数相加

2009-09-19 9:23
在杭电被这道题给虐了,一直没完成,现在我们的ACM队长给除了答案,那就剽窃一下拉…给大家分享

//code by cloudfancy
#include
using namespace std;

void add(char a[],char b[],char c[])
{
    char *strmax,*strmin,*result;
    int max=strlen(a);
    int min=strlen(b);
    int i,j,k;
    /////////////////////// 保证strmax 指向的是长度长的那个,max储存的是最长长度
    if(max=0&&j>=0 ; i--,j--,k--)
        result[k]=(strmax[i]-'0')+(strmin[j]-'0');

    for(;i>=0;i--,k--)    //把没处理完的给复制过去
        result[k]=strmax[i]-'0';
    /////////////////////////开始处理进位
    result[0]=0; //预留一位作为进位
    for(k=max;k>=1;k--)
    {
        if(result[k]>9)
        {
            result[k]-=10;   //也可以 result[k-1]+=result[k]/10,result[k]%=10; 效率低一点~不推荐~
            result[k-1]++;
        }
    }
    /////////////////////////把结果复制到c数组中
    if(result[0]==0) c[0]='*';
    else c[0]=result[0]+'0';
    for(k=max;k>=1;k--)
    {
        c[k]=result[k]+'0';
    }
    delete result;
}

int main()
{
    int T,i;
    char a[1000],b[1000],c[1001];
    int start;
    cin>>T;
    for(i=1;i>a>>b;
        add(a,b,c);
        if(c[0]=='*') start=1;
        else start=0;
        printf("Case %d:\n%s + %s = %s\n",i,a,b,&c[start]);
        if(i!=T) putchar('\n');
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注