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一样,但是第二个测试点没过???真的一样呀!