c++用整形数组类实现任意长度的两个整数高精度相乘的函数
时间: 2023-06-27 07:05:49 浏览: 140
下面是一个简单的实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class BigInt {
private:
static const int MAXN = 10000;
int num[MAXN];
int len;
public:
BigInt() {
memset(num, 0, sizeof(num));
len = 0;
}
BigInt(int n) {
memset(num, 0, sizeof(num));
len = 0;
while (n > 0) {
num[len++] = n % 10;
n /= 10;
}
}
void print() {
for (int i = len - 1; i >= 0; i--)
cout << num[i];
cout << endl;
}
friend BigInt operator*(const BigInt &a, const BigInt &b) {
BigInt c;
c.len = a.len + b.len;
for (int i = 0; i < a.len; i++) {
for (int j = 0; j < b.len; j++) {
c.num[i + j] += a.num[i] * b.num[j];
c.num[i + j + 1] += c.num[i + j] / 10;
c.num[i + j] %= 10;
}
}
while (c.len > 1 && c.num[c.len - 1] == 0)
c.len--;
return c;
}
};
int main() {
BigInt a(1234567890);
BigInt b(9876543210);
BigInt c = a * b;
c.print();
return 0;
}
```
在上面的代码中,我们定义了一个 `BigInt` 类来表示任意长度的整数。然后我们重载了 `*` 运算符来实现两个 `BigInt` 相乘的功能。
具体实现时,我们使用了一个整形数组来存储每一位上的数字,并且重载了 `<<` 运算符来方便输出结果。在 `*` 运算符的实现中,我们采用了竖式乘法的思想,逐位相乘,并将结果存储在一个新的 `BigInt` 对象中。最后,我们去除掉结果中不需要的前导零并返回结果。
需要注意的是,在实现过程中,我们要特别处理进位的情况,并且在最后去除多余的前导零。
阅读全文