18

重複の可能性:
long long in C/C++

プロジェクト オイラー問題の簡単なプログラムを作成します。unsigned long 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 未満になることはあり得ないため、ループは決して終了しないことに注意してください。代わりに、 along longおよびを使用して600851475143LLください。

于 2011-04-04T16:53:45.957 に答える
0

long longデータ型に対する dev-c++ サポートの制限である必要があります。MS VC++ 2010 で問題なくコンパイルできます。

于 2011-04-04T16:48:35.207 に答える