c++高精度阶乘代码实现
时间: 2024-07-25 13:01:28 浏览: 114
在 C++ 中实现高精度阶乘通常会使用大数运算库,因为标准库的 `std:: factorial` 函数无法处理大整数。一种常见的做法是使用递归结合数组或字符串来存储数字,并实现一个自定义的阶乘函数。以下是一个简单的高精度阶乘实现:
```cpp
#include <vector>
class BigInt {
public:
BigInt() : val(0) {}
BigInt(int n) {
for (int i = 0; n > 0; ++i) {
val.push_back(n % 10);
n /= 10;
}
if (n == 0)
val.pop_back(); // remove leading zero
}
void multiply(BigInt other) {
std::vector<int> result;
int carry = 0;
for (size_t i = 0; i < val.size() || i < other.val.size(); ++i) {
int a = i < val.size() ? val[val.size() - 1 - i] : 0;
int b = i < other.val.size() ? other.val[other.val.size() - 1 - i] : 0;
result.push_back(carry + a * b);
carry = result.back() / 10;
result.back() %= 10;
}
if (carry > 0)
result.push_back(carry);
val.swap(result);
}
void factorial(int n) {
if (n <= 1) {
val.clear();
return;
}
BigInt fact = *this; // store 1 as the initial factor
for (int i = 2; i <= n; ++i) {
fact.multiply(BigInt(i));
}
}
private:
std::vector<int> val;
};
// Usage example:
BigInt number;
number = 10; // set the number you want to calculate its factorial
number.factorial();
```
注意:这个例子仅用于教学目的,实际项目中可能需要更复杂的算法来优化性能和内存管理,比如使用Karatsuba算法或其他快速幂算法。
阅读全文