大整数相乘的问题

#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;
}

代码如上所示

运行结果:《大整数相乘的问题》

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/afeiluo/article/details/9714231
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞