2013-03-14 32 views
14

Tôi đã cố gắng sử dụngC++ Loại biến nào cho số nguyên cực lớn?

long long int 

Nhưng nó sẽ không làm việc cho số như 3141592653589793238462643383279502884197169399375, tôi cần cái này lên đến 10^80. Bất cứ ý tưởng? Cho tôi biết. Cảm ơn rất nhiều.

+0

Bạn cần sử dụng chuỗi ký tự hoặc chuỗi ký tự đại diện cho các số nguyên lớn như thế này. – taocp

+6

Thay vì tạo của riêng bạn, bạn có thể xem xét sử dụng GMP (http://gmplib.org/) – FatalError

+0

Thư viện BN trong OpenSSL cũng phù hợp với các công cụ cơ bản lớn, mặc dù nó có thể không có * mọi * tính năng số bạn đang tìm. Sau đó, nó đã được gửi về crypto. – WhozCraig

Trả lời

20

Bạn không thể sử dụng bất kỳ loại số nguyên được tích hợp nào cho việc này. Bạn cần một thư viện "nhiều số nguyên chính xác" hay còn gọi là "bignum". Đối với C++, tôi sẽ thử Boost.Multiprecision trước tiên, nhưng lưu ý rằng Boost có thể gặp nhiều rắc rối hơn đáng kể, đặc biệt nếu mô-đun bạn đang sử dụng có bất kỳ thành phần thư viện được chia sẻ (aka DLL) nào. Lựa chọn hiển nhiên khác là GNU MP. Nó chỉ có một giao diện C, nhưng nó được duy trì tốt, đáng tin cậy, nhanh chóng, và rất phổ biến (trên thực tế, nó xuất hiện rằng Boost.MP là "chỉ" một wrapper C++ cho nó!)

CẢNH BÁO: Bạn có thể muốn một thư viện bignum vì bạn đang cố gắng thực hiện một trong những nguyên thủy mã hóa sử dụng các số khổng lồ, như RSA. Không làm điều này. Các thư viện bignum chung không an toàn cho việc sử dụng mật mã, và thậm chí nếu chúng có, vẫn sẽ có hàng tá những sai lầm tinh vi mà bạn có thể làm để làm hỏng bảo mật của bạn. Sử dụng thư viện mật mã được thử nghiệm tốt để thay thế; cho C++ Tôi khuyên bạn nên Botan.

+3

Vấn đề là: Tôi không muốn sử dụng bất kỳ thư viện nào, có thể không? – user1815324

+1

viết lớp học của riêng bạn? –

+18

Giống như nhiều thứ trong cuộc sống, trong khi có thể nó không phải là khuyến khích. – Ben

0

Có hướng dẫn về codechef.com về cách lưu trữ số lượng rất lớn. Truy cập liên kết sau để đọc thông tin đầy đủ. Họ đã giải thích nó rất tốt.
Computing factorials of huge numbers in cc

+0

Thưa bạn, nếu bạn không hiểu những thông tin đã cho thì hãy bình luận nó đi ... Tôi sẽ cố hết sức để giải thích nó ... nhưng đừng đi downvoting câu trả lời khi bạn không hiểu nó ... – Ani

Các vấn đề liên quan