用数组存储大数,然后模拟乘法运算,忽略前导0输出。特殊情况:当输入的数值中有一个为0或两个都为0,结果都为0,忽略前导0时,需进行判断乘积结果是否为0。
#include<stdio.h>
#include<string.h>
const int maxn=510;
char sx[maxn],sy[maxn];
int x[maxn],y[maxn],mul[maxn][maxn];
int main()
{
while(scanf("%s%s",sx,sy)!=EOF){
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(mul,0,sizeof(mul));
int lex=strlen(sx),ley=strlen(sy);
for(int i=lex-1;i>=0;i--)
x[lex-i-1]=sx[i]-'0';
for(int i=ley-1;i>=0;i--)
y[ley-i-1]=sy[i]-'0';
for(int i=0;i<maxn;i++){
int c=0;
for(int j=0;j<maxn;j++){
int s=y[j]*x[i]+c;
mul[i][j]=s%10;
c=s/10;
}
}
for(int i=1;i<maxn;i++){
int c=0;
for(int j=0,k=i;j<maxn;j++,k++){
int s=mul[0][k]+mul[i][j]+c;
mul[0][k]=s%10;
c=s/10;
}
}
int j;
for(j=maxn-1;j>=0;j--) if(mul[0][j]) break;
if(j==-1) //判断乘积结果是否为0
printf("0\n");
else{
for(int i=j;i>=0;i--) printf("%d",mul[0][i]);
printf("\n");
}
}
return 0;
}
--------------------------------------------------------------------------------------------
Keep It Simple,Stupid!
--------------------------------------------------------------------------------------------