Sử dụng boost::multiprecision::cpp_int để tính giai thừa của số lớn (ví dụ 100!) vượt quá giới hạn 64-bit.
Ví dụ mã nguồn
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using boost::multiprecision::cpp_int;
using namespace std;
cpp_int factorial(int n) {
cpp_int result = 1;
for (int i = 2; i <= n; ++i)
result *= i;
return result;
}
int main() {
int n = 100;
cout << n << "! = " << factorial(n) << endl;
// Số chữ số
string s = factorial(n).str();
cout << "So chu so: " << s.length() << endl;
return 0;
}
Đầu ra
100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 So chu so: 158
Lưu ý
cpp_inttự động mở rộng độ chính xác khi cần.- Hiệu năng chậm hơn kiểubuiltin nhưng cho phép tính toán chính xác vô hạn.
- Cần link thư viện Boost (header-only cho multiprecision).