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

发布于 2024-10-29 15:01:22 字数 796 浏览 3 评论 0 原文

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

为项目欧拉问题编写一个简单的程序。拒绝编译,因为“整数常量对于“long”类型来说太大”,即使它应该完全在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;
        }
    }
}

Possible Duplicate:
long long in C/C++

Writing a simple program for a project Euler problem. Refuses to compile because "integer constant is too large for "long" type", even though it should be well within the size limits of an unsigned long long. Using the dev-c++ compiler.

code in question:

#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;
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一花一树开 2024-11-05 15:01:46

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

Must be a limitation of dev-c++ support for long long datatype. It compiles fine on MS VC++ 2010.

笨死的猪 2024-11-05 15:01:45

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

请注意,即使如此,您的 for 循环也永远不会终止,因为 unsigned 永远不会小于 0。相反,请使用 long long600851475143LL

Your literal as typed has type int which isn't big enough to hold the value. Try 600851475143ULL as a first fix.

Note even with that, your for loop will never terminate since an unsigned can never be less than 0. Instead, use a long long and 600851475143LL.

吃→可爱长大的 2024-11-05 15:01:37

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

Try an "ULL" suffix: 600851475143ULL

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文