对于“long”类型,整数常量太大

时间:2011-04-04 16:38:48

标签: c++ dev-c++

  

可能重复:
  long long in C/C++

为项目Euler问题编写一个简单的程序。拒绝编译,因为“整数常量对于”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;
        }
    }
}

3 个答案:

答案 0 :(得分:29)

尝试“ULL”后缀:600851475143ULL

答案 1 :(得分:4)

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

即使这样,您的for循环也永远不会终止,因为无符号永远不会小于0.相反,请使用long long600851475143LL

答案 2 :(得分:0)

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