長さmと数値nは乗算され、積の長さはm + n未満でなければなりません。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char x[50],y[50],r[100];
int sum,add,t,m,n,i,j;
while(scanf("%s",x)>0)
{
scanf("%s",y);
for(i=0;i<100;i++)//初始化使得r字符串中均为‘0’,不是初始化为空
{
r[i]='0';
}
m=strlen(x);
n=strlen(y);
for(i=m-1;i>=0;--i)
{
add=0;
for(j=n-1;j>=0;--j)
{
t=(x[i]-'0')*(y[j]-'0');//注意t是int类型,不能字符直接相乘
sum=r[i+j+1]+add+t%10-'0';
r[i+j+1]='0'+sum%10;
add=t/10+sum/10;
}
r[i]+=add;
}
for(i=0;r[i]=='0';i++);//把前面是0的消去,注意分号
while(i<=m+n-1)
{
printf("%c",r[i]);
i++;
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char x[50],y[50];
int i,j,m,n,add,k;
int *ans;//结果是int类型
while(scanf("%s",x)>0)
{
scanf("%s",y);
m=strlen(x);
n=strlen(y);
k=m+n;
ans=(int*)malloc(sizeof(int)*(k));
memset(ans,0,sizeof(int)*k);
for(i=m-1;i>=0;i--)
{
for(j=n-1;j>=0;j--)
{
ans[(m-1-i)+(n-1-j)]+=(x[i]-'0')*(y[j]-'0');
}
}
for(i=0;i<m+n-1;i++)
{
add=ans[i]/10;
ans[i]=ans[i]%10;
ans[i+1]+=add;
}
for(i=m+n-1;ans[i]==0;i--);
while(i>=0)
{
printf("%d",ans[i]);
i--;
}
printf("\n");
}
return EXIT_SUCCESS;
}