高精度乘法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度乘法相关的知识,希望对你有一定的参考价值。
计算大数间的乘法,原理来源我们的乘法笔算
1 2 3
* 5 6 7
*--------------------------
7 14 21
6 12 18
5 10 15
*--------------------------
5 16 34 32 21
高精度乘法一共分为4步:
1.运算前的准备:
(1)输入两个字符串
1 char num1[100] = {0}, num2[100] = {0};
2 int a[100] = {0}, b[100] = {0};
3 scanf("%s%s", num1, num2);
4 int n = strlen(nmu1);
5 int m = strlen(num2);
(2)将其转化为数字形式。注意:因为乘法从末尾开始,所以数字要倒叙存储。
1 int i, j;
2 for(i = 0, j = n-1; i < n; i++, j--)
3 a[i] = nmu1[j]-‘0‘;
4 for(i = 0; j = m-1; i < m; i++, j--)
5 b[i] = num2[j]-‘0‘;
2.一位一位的运算。
1 int c[3000] = {0};
2 for(i = 0; i < n; i++) {
3 for(j = 0; j < m; j++)
4 c[i+j] = a[i] * b[j];
5}
3.处理进位。
1 for(i = 0; i < n+m; i++) {
2 if(c[i] > 10) {
3 c[i+1] += c[i] / 10;
4 c[i] %= 10;
5 }
6 }
4.输出结果。
1 for(i = n+m-1; i >= 0; i--) {
2 if(c[i]) {
3 j = i;
4 break;
5 }
6 }
7 for(i = j; i < n+m; i++)
8 printf("%d", c[i]);
以上是关于高精度乘法的主要内容,如果未能解决你的问题,请参考以下文章