重複の可能性:
C/C++では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;
}
}
}
「ULL」サフィックスを試してください:600851475143ULL
入力されたリテラルの型はint
であり、値を保持するのに十分な大きさではありません。最初の修正として600851475143ULL
を試してください。
それでも、unsignedが0未満になることはないため、for
ループが終了することはありません。代わりに、long long
と600851475143LL
を使用してください。
long longデータ型のdev-c ++サポートの制限である必要があります。 MS VC++ 2010で正常にコンパイルされます。