Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tính giai thừa số lớn với Boost.Multiprecision C++


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_int tự độ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).