#include <stdio.h>
#include <stdlib.h>
#define MAXNUMLEN 512
void multiplyBigNum(char num1[],char num2[]){
int num1len=strlen(num1);
int num2len=strlen(num2);
printf("第一个数的长度是:%d\n第二个数的长度是:%d\n",num1len,num2len);
if(num1len>512||num2len>512){
printf("对不起你输入的大整数数位超出了最大值\n");
return;
}
int * result=(int *)malloc((num1len+num2len-1)*sizeof(int));//两个数相乘可能为:num1len+num2len-1位,也有可能为num1len+num2len位
memset(result,0,(num1len+num2len-1)*sizeof(int));//memset是按照字节为单位初始化的 一定要注意
for(int i=num1len-1;i>=0;i--){
for(int j=num2len-1;j>=0;j--){
if(num1[i]>'9'||num1[i]<'0'||num2[j]>'9'||num2[j]<'0'){
printf("输入非法!!!!\n");
return;
}
result[i+j]+=(num1[i]-'0')*(num2[j]-'0');
}
}
for(int p=num1len+num2len-2;p>0;p--){
int temp=result[p];
if(temp>=10){
result[p]=temp%10;
result[p-1]+=temp/10;
}
}
for(int k=0;k<num1len+num2len-1;k++){
printf("%d",result[k]);
}
printf("\n");
}
int main()
{
char str1[MAXNUMLEN],str2[MAXNUMLEN];
printf("注意大数的长度不能超过512位\n");
printf("请输入第一个大数:");
gets(str1);
printf("请输入第二个大数:");
gets(str2);
multiplyBigNum(str1,str2);
return 0;
}
代码如上所示
运行结果: