2010-08-29 4 views
10

Мне нужно сохранить номер 600851475143 в моей программе. Я пытался сохранить его в переменной long long int и long double, а но на компиляции он показывает ошибкуКакой тип данных использовать для очень больших чисел в C++?

integer constant is too large for "long" type. 

Я также попытался unsigned long long int тоже. Я использую MinGW 5.1.6 для запуска g ++ в Windows.

Какой тип данных следует использовать для хранения номера?

ответ

28

long long все в порядке, но вы должны использовать суффикс на буквальном.

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

Если оставить ll с конца буквальных, то компилятор предполагает, что вы хотите, чтобы это было int, что в большинстве случаев является 32-разрядным числом. 32-бит недостаточно для хранения этого большого значения, поэтому предупреждение. Добавляя ll, вы указываете компилятору, что литерал должен интерпретироваться как long long, который является достаточно большим для хранения значения.

Суффикс также полезен для указания, какая перегрузка вызывает функцию. Например:

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

хорошо спасибо, но может кто-нибудь объяснить мне, почему мы это делаем? что происходит, добавляя литералы? – Vaibhav

+0

@vaibhav: Смотрите мое редактирование. –

+2

Вы действительно должны использовать верхний регистр LL здесь. – configurator

9

Вы имели право идею с long long int (или unsigned long long int), но, чтобы предотвратить предупреждение, вы должны сообщить компилятору, что константа является long long int:

long long int value = 600851475143LL; 

Те " L "s может быть в нижнем регистре, но я бы посоветовал против этого - в зависимости от шрифта, нижний регистр« L »часто выглядит как одна цифра (« 1 »).

4

Посмотрите библиотеку GNU MP Bignum http://gmplib.org/

+6

Путь снимать мышь с пистолетом-слоном. –

+1

Ну, из-за того, как было написано название вопроса, я думаю, что здесь много людей, охотящихся на слонов. – Doodad

Смежные вопросы