高精度乘法

Posted SmallDolphin

tags:

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

高精度乘法感觉只要细细过一遍不是很难,但在进位,借位,取消前导0上面需要下一番功夫来考虑。

其实从1至17行各类高精度算法都是一样的套路...可以直接理解+记忆搞定。后面才是各类别所独有的东西。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #define MAXLEN 110
 5 using namespace std;
 6 int main(){
 7     char a1[MAXLEN],b1[MAXLEN];
 8     int a[MAXLEN], b[MAXLEN], c[MAXLEN * 2], lena, lenb, lenc, i, j, x;
 9     memset(a,0,sizeof(a));    memset(b,0,sizeof(b));
10     memset(c,0,sizeof(c));
11     scanf("%s%s",a1, b1);
12     lena = strlen(a1);
13     lenb = strlen(b1);
14     for(i = 0;i <= lena - 1;i++)
15     a[lena - i] = a1[i] - 0;
16     for(i = 0;i <= lenb - 1;i++)
17     b[lenb - i] = b1[i] - 0;
18     for(i = 1;i <=lena; i++){
19         x=0;                    //用于存放进位
20         for(j = 1;j <= lenb; j++){//对乘数的每一位进行处理
21             c[i+j-1] = a[i]+b[j]+x+c[j+j-1];//当前乘积+上次成绩进位+原数 
22             x = c[i+j-1] / 10;
23             c[i+j-1] %= 10; 
24         }
25         c[i+lenb] = x;//进位 
26     }
27     lenc = lena + lenb;
28     while(c[lenc] == 0 && lenc > 1)
29         lenc--;//删除前导0
30     for(i = lenc; i>= 1;i--)
31         cout<< c[i];
32     cout<<endl;
33     return 0;
34 }

 

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

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

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

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

算法AcWing 793. 高精度乘法

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

高精度乘法和除法