18

可能重复:
C/C++ 中的 long long

为项目欧拉问题编写一个简单的程序。拒绝编译,因为"integer constant is too large for "long" type",即使它应该在unsigned long long的大小限制内。使用 dev-c++ 编译器。

有问题的代码:

#include <iostream>

bool isprime (unsigned long long i)
{
    if(i==1||i==0) return false;
    if(i==2) return true;
    for(unsigned long long k=2;k!=i-1;k++)
    {      
        if(i%k==0) return false;
    }
    return true;
}

int main()
{
    for(unsigned long long i=600851475143;i>=0;i--) //problematic line
    {
        if(isprime(i))
        {
            std::cout<<i;
            std::cin.get();
            return 0;
        }
    }
}
4

3 回答 3

29

尝试使用“ULL”后缀:600851475143ULL

于 2011-04-04T16:39:53.087 回答
4

您输入的文字的类型int不足以容纳该值。尝试600851475143ULL作为第一个修复。

请注意,即使这样,您的for循环也永远不会终止,因为 unsigned 永远不会小于 0。而是使用 a long longand 600851475143LL

于 2011-04-04T16:53:45.957 回答
0

必须是 dev-c++ 对long long数据类型支持的限制。它在 MS VC++ 2010 上编译得很好。

于 2011-04-04T16:48:35.207 回答