c++用数组类实现任意长整数乘任意长整数
时间: 2024-05-16 20:16:26 浏览: 11
实现任意长整数乘法可以采用高精度算法,即将整数按位存储在数组中进行运算。以下是使用数组类实现任意长整数乘法的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
class BigInt {
private:
vector<int> num; // 数组用于存储大整数
public:
BigInt() {} // 默认构造函数
BigInt(string s) { // 将字符串转换为大整数
for (int i = s.size() - 1; i >= 0; i--)
num.push_back(s[i] - '0');
}
BigInt operator*(const BigInt& b) const { // 重载乘法运算符
BigInt res; // 存储结果
res.num.resize(num.size() + b.num.size()); // 申请足够的空间
for (int i = 0; i < num.size(); i++) {
int carry = 0;
for (int j = 0; j < b.num.size(); j++) {
int sum = num[i] * b.num[j] + res.num[i+j] + carry;
carry = sum / 10;
res.num[i+j] = sum % 10;
}
if (carry > 0)
res.num[i+b.num.size()] += carry;
}
while (res.num.size() > 1 && res.num.back() == 0)
res.num.pop_back();
return res;
}
friend ostream& operator<<(ostream& os, const BigInt& b) { // 重载输出运算符
for (int i = b.num.size() - 1; i >= 0; i--)
os << b.num[i];
return os;
}
};
int main() {
string s1, s2;
cin >> s1 >> s2;
BigInt a(s1), b(s2);
cout << a * b << endl;
return 0;
}
```
可以看到,我们定义了一个 `BigInt` 类来表示任意长的整数,其中存储整数的数组使用了 `vector` 类。在进行乘法运算时,我们对两个大整数进行按位相乘,并将结果存储在 res 数组中。最后需要将结果中多余的前导零去掉,输出乘积即可。