高精度乘法

Posted 佰大于

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度乘法相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 #include<string.h>
 3 #define MAX   200                                   //最大位数
 4 int main()
 5 {
 6     int j,k;
 7     int len1,len2,len,flag;
 8     int c1[MAX],c2[MAX],ans[MAX+MAX+1];             //int存储大数
 9     char d1[MAX+1],d2[MAX+1];                       //读入大数
10     memset(ans,0,sizeof(ans));                      //方便输出结果
11     printf("Please input a big number:");
12     scanf("%s",d1);
13     printf("Please input another big number:");
14     scanf("%s",d2);
15     len1=strlen(d1);
16     len2=strlen(d2);
17     j=0;
18     k=len1-1;
19     while(d1[j] != \0)                        //转换成数字存放在int数组
20         c1[k--]=d1[j++]-0;
21     j=0;
22     k=len2-1;
23     while(d2[j] != \0)                        //转换成数字存放在int数组
24         c2[k--]=d2[j++]-0;
25     //处理因子为0
26     if(!c1[len1-1] || !c2[len2-1] )
27     {
28         printf("%s * %s = 0\n",d1,d2);
29         return 0;
30     }
31     //乘法
32     for(k=0; k<len2; k++)
33         for(j=0; j<len1; j++)
34             ans[k+j]+=c1[j]*c2[k];              //列竖式
35     //处理进位
36     len=len1+len2+1;                            //结果位数不能超过两个数字位数和+1
37     for(k=0; k<len; k++)
38         if(ans[k]>=10)
39         {
40             ans[k+1]+=ans[k]/10;
41             ans[k]%=10;
42         }
43     //输出结果
44     printf("%s * %s = ",d1,d2);
45     flag=0;
46     while(len--)
47     {
48         if(ans[len]!=0)
49             flag=1;
50         if(flag)
51             printf("%d",ans[len]);
52     }
53     putchar(\n);
54     return 0;
55 }

 

以上是关于高精度乘法的主要内容,如果未能解决你的问题,请参考以下文章

求助 c语言实现高精度乘法

高精度 加法 减法 乘法 除法 整合

n阶高精度乘法,(求高阶阶乘)

算法AcWing 793. 高精度乘法

洛谷 P1303 A*B Problem(高精度乘法) 题解

高精度乘法和除法