10

我必须将号码存储600851475143在我的程序中。我尝试将它存储在long long int变量中,long double但在编译时显示错误

integer constant is too large for "long" type. 

我也试过unsigned long long int了。我正在使用 MinGW 5.1.6 在 Windows 上运行 g++。

我应该使用什么数据类型来存储数字?

4

3 回答 3

28

long long很好,但你必须在文字上使用后缀。

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

如果您将ll文字放在末尾,那么编译器会假定您希望它是一个int,在大多数情况下是一个 32 位有符号数。32 位不足以存储这么大的值,因此会发出警告。通过添加ll,您向编译器表示该文字应被解释为 a 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)
}
于 2010-08-29T15:08:29.490 回答
9

您对long long int(or unsigned long long int) 的想法是正确的,但是为了防止出现警告,您需要告诉编译器该常量是 a long long int

long long int value = 600851475143LL;

那些“L”可以是小写的,但我建议不要这样做——根据字体的不同,小写的“L”通常看起来很像一个数字(“1”)。

于 2010-08-29T15:09:12.063 回答
6

查看 GNU MP Bignum 库http://gmplib.org/

于 2010-08-29T15:09:49.363 回答