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

Xử lý số lớn trong C++ với thư viện Boost.Multiprecision


Thư viện Boost.Multiprecision cho phép làm việc với số nguyên lớn tùy ý độ chính xác (arbitrary precision) vượt quá giới hạn 64-bit.

Kiểu dữ liệu thường dùng

  • int128_t, int256_t, int1024_t - độ chính xác cố định
  • cpp_int - độ chính xác tùy ý (tự động mở rộng)

Ví dụ 1: Nhân số lớn với int128_t

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using namespace std;

int128_t largeProduct(long long a, long long b) {
    return (int128_t)a * b;
}

int main() {
    long long n1 = 98745636214564698;
    long long n2 = 7459874565236544789;
    cout << "Tich = " << largeProduct(n1, n2) << endl;
    return 0;
}

Đầu ra

Tich = 736630060025131838840151335215258722

Ví dụ 2: Giai thừa lớn với cpp_int

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using namespace std;

cpp_int largeFactorial(int n) {
    cpp_int fact = 1;
    for (int i = n; i > 1; --i) fact *= i;
    return fact;
}

int main() {
    cout << "50! = " << largeFactorial(50) << endl;
    return 0;
}

Đầu ra

50! = 30414093201713378043612608166064768844377641568960512000000000000