高精度整數的乘法
//高精度整數的乘法
#include<iostream>
using namespace std;
int Insert(int* a, int na, int x) {
for (int i = na; i > 0; i--)
a[i] = a[i - 1];
a[0] = x;
return na + 1;
}
int Mul(int* a, int na, int x) {
int i;
int jw = 0; //進位
for (i = 0; i < na; i++) {
int temp = a[i] * x + jw;
a[i] = temp % 10;
jw = temp / 10;
}
//進位不為0的時候處理a[na]及以後的位
while (jw != 0) {
a[i] = jw % 10;
i++;
jw = jw / 10;
}
return i;
}
int Mult(int* a, int na, int* b, int nb, int* c) {
int d[100][100];
int i, j, k;
int m = 0;
//初始化為0
for (i = 0; i < 100; i++)
for (j = 0; j < 100; j++)
d[i][j] = 0;
//用a[1], a[2], ... a[na - 1]來乘以b陣列中每一個數
//a[i]乘以後的結果存放在 d[i]中
for (i = 0; i < na; i++) {
//先賦值
for (j = 0; j < nb; j++)
d[i][j] = b[j];
m = nb;
//根據i處在什麼位置插入0
//i為個位,插入0個0
//i為十位,插入一個0
for (k = 0; k < i; k++)
m = Insert(d[i], m, 0);
//把d[i]的所有元素乘以a[i]
for (k = 0; k < m; k++)
d[i][k] *= a[i];
}
//相加
for (i = 0; i < m; i++)
for (j = 0; j < na; j++)
c[i] += d[j][i];
//進位
for (i = 0; i < m; i++) {
c[i + 1] += c[i] / 10;
c[i] = c[i] % 10;
}
//進位
while (c[i] > 10) {
c[i + 1] = c[i] / 10;
c[i] = c[i] % 10;
i++;
}
return i;
}
int main() {
int a[20] = { 0 }, na;
int b[20] = { 0 }, nb;
int c[40] = { 0 }, nc;
int x1, x2;
int n1, n2;
int i;
a[0] = b[0] = 1;
na = nb = 1;
cin >> x1 >> n1 >> x2 >> n2;
for (i = 0; i < n1; i++)
na = Mul(a, na, x1);
for (i = 0; i < n2; i++)
nb = Mul(b, nb, x2);
nc = Mult(a, na, b, nb, c);
for (i = nc - 1; i >= 0; i--)
cout << c[i] << ' ';
}
實現過程:
最後進位即可得到結果
缺點: a, b, c和d陣列的所有元素都要為0
不然出現隨機數
相關文章
- 高精度乘法
- 大整數乘法
- 高精度乘法C++C++
- 遞迴與分治之大整數乘法遞迴
- c++ u7-02-高精度乘法C++
- 數學-高精度
- 1051 複數乘法
- 大數加法乘法
- 高精度數學運算
- 高精度 加+ 高精度
- 高精度 減- 高精度
- 2034 整數的個數
- 數值的整數次方
- 數數的位數(正整數)
- 高精度-高精度減法
- 輸入一個整數,返回這個整數的位數
- PAT-B 1051 複數乘法
- 提取不重複的整數
- 整數排序排序
- 整數環
- 整數冪
- 整數拆分
- L1-080 乘法口訣數列
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- L1-080 乘法口訣數列 分數 20
- JZ-012-數值的整數次方
- python整數和變數Python變數
- js小數轉整數JS
- 大數運算—大數加法、減法、乘法、除法詳解
- 有一組整數資料,全部除以一個整數a,使得餘數是同n種數字,如何計算出這個整數a的全部可能。
- 整數溢位
- 求正整數
- 整數小拼接
- 大整數加法
- 翻轉整數
- 反轉整數
- 整數反轉:給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。符號
- 線性代數 - 矩陣形式下的最小二乘法矩陣