Code Bye

uva10106高精度乘法老是WA感觉没错啊

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[255],b[255],C[505];
char c[255],d[255];
void f(int L1,int L2)
{
   int i,j;
   for(i=0;i<L1;i++)
     for(j=0;j<L2;j++)
     {
       C[i+j]+=a[i]*b[j];
       C[i+j+1]+=C[i+j]/10;
       C[i+j]%=10;
     }
}
int main()
{
    int L1,L2;
    while(scanf(“%s%s”,c,d)!=EOF)
    {
        memset(a,0,255);
        memset(b,0,255);
        memset(C,0,505);
       int L,i;
       L1=strlen(c);
       for(i=0;i<L1;i++)a[i]=c[L1-1-i]-“”0″”;
       L2=strlen(d);
       for(i=0;i<L2;i++)b[i]=d[L2-1-i]-“”0″”;

       f(L1,L2);
       L=L1+L2;
       while(!C[L-1]&&L>=1)L–;
       if(L==0)printf(“%d”,0);
       else for(i=L-1;i>=0;i–)printf(“%d”,C[i]);
       printf(“\n”);
    }
    return 0;
}

20分
没细看算法,不过memset显然错了。应该是
 memset(a,0,sizeof(a));
或者
 memset(a,0,255 * sizeof(int));

还有,你确定255和505够用?数组稍微定义的大一点没啥坏处

20分
两个255位十进制正整数相乘,最大可得255*2,即510位十进制正整数。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明uva10106高精度乘法老是WA感觉没错啊