一开始想法是把两个字符串转换成一个整数,然后相乘再输出,但是这个方法会溢出,在字符串位数很多的时候。下边的方法是问大佬的,模拟两个数的乘法过程。
void reverse(int *num,int n)
{
int i,k;
k=n/2;
for(i=0;i<k;i++){
int temp=num[i];
num[i]=num[n-1-i];
num[n-1-i]=temp;
}
}
char* multiply(char* num1, char* num2) {
int a1[strlen(num1)];
int a2[strlen(num2)];
char num3[strlen(num1)+strlen(num2)];
int i,j;
for(i=0;i<strlen(num1);i++)
a1[i]=num1[i]-'0';
for(i=0;i<strlen(num2);i++)
a2[i]=num2[i]-'0';
reverse(a1,strlen(num1));
reverse(a2,strlen(num2));
int c[strlen(num1)+strlen(num2)];
for(i=0;i<strlen(num1)+strlen(num2);i++){
c[i]=0;
}
for(i=0;i<strlen(num1);i++){
for(j=0;j<strlen(num2);j++){
c[i+j]+=a1[i]*a2[j];
}
}
for(i=0;i<strlen(num1)+strlen(num2)-1;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
reverse(c,strlen(num1)+strlen(num2)-1);
for(i=0;i<strlen(num1)+strlen(num2)-1;i++){
num3[i]=c[i]+'0';
//printf("%c",num3[i]);
}
return num3;
}