C语言:高精度乘法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* multiply(char* num1, char* num2)
{
    int la,lb,lc,i,j;
    int a[2001]={0};
    int b[2001]={0};
    int c[2001]={0};
    la=strlen(num1);
    lb=strlen(num2);
    for(i=0;i<la;i++)
    {
        a[la-i-1]=num1[i]-'0';
    }
    for(i=0;i<lb;i++)
    {
        b[lb-i-1]=num2[i]-'0';
    }
    lc=la+lb;
    for(i=0;i<la;i++)
    {
        for(j=0;j<lb;j++)
        {
            c[i+j]+=a[i]*b[j];
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
    }
    while(c[lc]==0&&lc>0)lc--;
    char *re=(char *)malloc(sizeof(char)*(lc+2));
    for(i=lc;i>=0;i--){
        re[lc-i]=c[i]+'0';
    }
    re[lc+1]=0;
    return re;
}
int main(){
    char num1[102];
    char num2[102];
    scanf("%s", num1);
    scanf("%s", num2);
    char* num = multiply(num1, num2);
    printf("%s", num);
    free(num);
    return 0;
}

 计算流程

  1. 通过字符串引入两串数字分别存放到两个字符数组
  2. 将其每一位数字逆序分别存放到两个整型数组
  3. 进行计算并处理进位(关键)
  4. 将结果存放到第三个整型数组当中(引进动态数组)
  5. 输出结果
posted @ 2022-12-02 17:21  myrj  阅读(168)  评论(0编辑  收藏  举报