2010-08-29 28 views
10

Tôi phải lưu trữ số 600851475143 trong chương trình của mình. Tôi cố gắng để lưu nó trong long long int biến và long double cũng nhưng trên biên dịch nó hiển thị lỗiLoại dữ liệu nào để sử dụng cho một số lượng rất lớn trong C++?

integer constant is too large for "long" type. 

Tôi cũng đã cố gắng unsigned long long int quá. Tôi đang sử dụng MinGW 5.1.6 để chạy g ++ trên windows.

Tôi nên sử dụng loại dữ liệu nào để lưu trữ số?

Trả lời

28

long long là tốt, nhưng bạn phải sử dụng hậu tố trên chữ.

long long x = 600851475143ll; // can use LL instead if you prefer. 

Nếu bạn rời khỏi ll ra khỏi cuối của chữ, sau đó trình biên dịch giả định rằng bạn muốn nó được một int, mà trong nhiều trường hợp là một số ký 32-bit. 32 bit không đủ để lưu trữ giá trị lớn đó, do đó cảnh báo. Bằng cách thêm ll, bạn biểu thị cho trình biên dịch rằng chữ nên được hiểu là long long, đủ lớn để lưu trữ giá trị.

Hậu tố cũng hữu ích khi chỉ định quá tải cần gọi cho một hàm. Ví dụ:

void foo(long long x) {} 
void foo(int x) {} 

int main() 
{ 
    foo(0); // calls foo(int x) 
    foo(0LL); // calls foo(long long x) 
} 
+0

cũng cảm ơn nhưng có ai có thể giải thích cho tôi tại sao chúng tôi làm điều này? điều gì xảy ra bằng cách thêm các chữ? – Vaibhav

+0

@vaibhav: Xem chỉnh sửa của tôi. –

+2

Bạn thực sự nên sử dụng LL trường hợp ở trên. – configurator

9

Bạn đã có ý tưởng đúng với long long int (hoặc unsigned long long int), nhưng để ngăn chặn sự cảnh báo, bạn cần phải nói với trình biên dịch rằng hằng số là một long long int:

long long int value = 600851475143LL; 

Những " L "s có thể thấp hơn trường hợp, nhưng tôi khuyên bạn nên chống lại nó - tùy thuộc vào phông chữ, một chữ thường" L "thường trông rất giống như một chữ số (" 1 ") thay thế.

4

Hãy xem thư viện GNU MP Bignum http://gmplib.org/

+6

Cách bắn chuột bằng súng Voi. –

+1

Vâng, do tiêu đề của câu hỏi được viết, tôi nghĩ rất nhiều người săn voi kết thúc ở đây. – Doodad

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