我必须将号码存储600851475143
在我的程序中。我尝试将它存储在long long int
变量中,long double
但在编译时显示错误
integer constant is too large for "long" type.
我也试过unsigned long long int
了。我正在使用 MinGW 5.1.6 在 Windows 上运行 g++。
我应该使用什么数据类型来存储数字?
我必须将号码存储600851475143
在我的程序中。我尝试将它存储在long long int
变量中,long double
但在编译时显示错误
integer constant is too large for "long" type.
我也试过unsigned long long int
了。我正在使用 MinGW 5.1.6 在 Windows 上运行 g++。
我应该使用什么数据类型来存储数字?
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)
}
您对long long int
(or unsigned long long int
) 的想法是正确的,但是为了防止出现警告,您需要告诉编译器该常量是 a long long int
:
long long int value = 600851475143LL;
那些“L”可以是小写的,但我建议不要这样做——根据字体的不同,小写的“L”通常看起来很像一个数字(“1”)。
查看 GNU MP Bignum 库http://gmplib.org/