2010-04-14 58 views
14

Tôi cần trợ giúp làm việc với số lượng rất lớn. Theo tính toán của Windows, số mũLưu trữ và làm việc với số lớn trong C

174^55 = 1.6990597648061509725749329578093e+123 

Làm cách nào để lưu trữ điều này bằng C (chuẩn c99)?

int main(){ 
    long long int x = 174^55; //result is 153 
    printf("%lld\n", x); 
} 
+7

Trong C, '^' là nhị phân XOR, không phải là số mũ. Bạn cần sử dụng hàm 'pow()' cho điều đó. –

+1

Toán tử '^' có nghĩa là XOR, không phải là số mũ, trong C. – pyon

+0

Bạn đang thực hiện một XOR, u cần pow – Skynight

Trả lời

25

Các loại bình thường trong C thường có thể lưu trữ tối đa 64 bit, vì vậy, bạn sẽ phải lưu trữ số lớn trong mảng, ví dụ và tự viết các phép toán. Nhưng bạn không nên phát minh lại bánh xe ở đây - bạn có thể thử GNU Multiple Precision Arithmetic Library cho mục đích này.

Và như các nhận xét đã được chỉ ra, hoạt động ^ là XOR nhị phân. Đối với lũy thừa, bạn sẽ phải sử dụng các hàm toán học như pow.

5

Nếu xấp xỉ là OK, bạn có thể sử dụng số dấu phẩy động (float hoặc double). Và bạn cần pow, không phải ^, như những người bình luận nói.

Tuy nhiên, đối với mật mã, xấp xỉ không hoạt động. Bạn cần hỗ trợ cho số học với số nguyên rất lớn. GMP cung cấp hỗ trợ số học tổng quát chính xác. Nhiều gói mã hóa cũng sẽ có các thuật toán như vậy trong mã của chúng, hoặc thông qua thư viện của bên thứ ba hoặc được tích hợp sẵn; PuTTY có một thư viện bignum cho các số nguyên lớn, và OpenSSL có thể có một cái gì đó tương tự.

Loại dữ liệu C cơ bản là không đủ.

2

Bạn có thể lưu trữ nó trong một dãy số nguyên. Số nguyên 64 bit chỉ là 2 số nguyên 32 bit. Một số nguyên 1024 bit cũng có thể được xem như 32 số nguyên 32 bit.

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