高精度*高精度的算法
时间: 2023-07-10 17:19:16 浏览: 183
高精度乘法可以使用传统的竖式乘法算法进行计算。具体步骤如下:
1. 将两个高精度数从低位到高位按位相乘,得到中间结果。
2. 将中间结果从低位到高位依次进位,得到最终结果。
具体实现时,可以使用两个数组来存储两个高精度数,按位相乘后将结果存储到一个新的数组中。然后再依次进位得到最终结果。需要注意的是,乘法过程中可能会产生进位,因此需要考虑进位的情况。
下面是一个简单的高精度乘法算法的示例代码(使用C++实现):
```
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 高精度乘法
vector<int> mul(vector<int>& a, vector<int>& b) {
int n = a.size(), m = b.size();
vector<int> c(n + m);
// 依次计算每一位的乘积
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
c[i + j] += a[i] * b[j];
}
}
// 处理进位
int t = 0;
for (int i = 0; i < n + m; i++) {
c[i] += t;
t = c[i] / 10;
c[i] %= 10;
}
// 去掉前导0
while (c.size() > 1 && c.back() == 0) {
c.pop_back();
}
return c;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
// 将字符串转换为高精度数
vector<int> a(s1.size()), b(s2.size());
for (int i = 0; i < s1.size(); i++) {
a[i] = s1[s1.size() - i - 1] - '0';
}
for (int i = 0; i < s2.size(); i++) {
b[i] = s2[s2.size() - i - 1] - '0';
}
// 计算乘积
vector<int> c = mul(a, b);
// 输出结果
for (int i = c.size() - 1; i >= 0; i--) {
cout << c[i];
}
cout << endl;
return 0;
}
```
阅读全文