跟测试数据一样,为啥过不了?

P1303 A*B Problem

zwt949742982 @ 2021-08-06 22:16:44

#include<stdio.h>
char a[2005],b[2005],c[4005],d[4005];
int main()
{
    int xxx;
    xxx='0';
    int judge=0;
    int x,y;
    scanf("%s%n",a,&x);scanf("%s%n",b,&y);y-=1;
    if(a[0]=='0'||b[0]=='0'){printf("0");return 0;}
    if(a[0]=='-'&&b[0]!='-')
    {
        for(int i=0;i<=2004;i++)a[i]=a[i+1];judge=1;x-=1;goto fi;
    }
    if(b[0]=='-'&&a[0]!='-')
    {
        for(int i=0;i<=2004;i++)b[i]=b[i+1];judge=1;y-=1;goto fi;
    }
    if(a[0]=='-'&&b[0]=='-')
    {
        for(int i=0;i<=2004;i++){a[i]=a[i+1];b[i]=b[i+1];}x-=1;y-=1;goto fi;
    }
    fi:
    int temp=0;int k=0;int l=0;
    for(int i=y-1;i>=0;i--,l++)
    {
        for(int j=x-1,k=1,temp=0;j>=0;j--,k++)
        {
            //c[k+y-1-i]+=((a[j]-48)*(b[i]-48)+temp)%10;
            //temp=(a[j]-48)*(b[i]-48)/10;printf("k=%d\tc[%d]=%d\n",k,k+y-1-i,c[k+y-1-i]);
            c[k+l]+=((a[j]-xxx)*(b[i]-xxx)+temp);
            temp=c[k+l]/10;
            c[k+l]=c[k+l]%10;
            if(j==0)c[k+l+1]+=temp;
        }

    }
    if(judge)printf("-");
    for(int i=4004;i>=0;i--)
    {
        if(c[i])
        {
            for(int j=i;j>0;j--)
            {d[i-j]=c[j]+48;
            }
            goto he;

        }
    }
    he:
        printf("%s",d);
     return 0;
}

甚至考虑了负数,而且我输出跟测试数据2一样,但是第二个测试点没过???真的一样呀!


|