整数常量对于“long”来说太大类型
可能的重复:
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;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
必须是 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.
您输入的文字具有
int
类型,该类型的大小不足以容纳该值。尝试将600851475143ULL
作为第一个修复。请注意,即使如此,您的
for
循环也永远不会终止,因为 unsigned 永远不会小于 0。相反,请使用long long
和600851475143LL
。Your literal as typed has type
int
which isn't big enough to hold the value. Try600851475143ULL
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 along long
and600851475143LL
.尝试使用“ULL”后缀:
600851475143ULL
Try an "ULL" suffix:
600851475143ULL