10

600851475143プログラムに番号を保存する必要があります。long long int変数にも保存しようとしましlong doubleたが、コンパイルするとエラーが表示されます

integer constant is too large for "long" type. 

私もやってみunsigned long long intました。Windowsでg++を実行するためにMinGW5.1.6を使用しています。

番号を格納するためにどのデータ型を使用する必要がありますか?

4

3 に答える 3

28

long longは問題ありませんが、リテラルに接尾辞を使用する必要があります。

long long x = 600851475143ll; // can use LL instead if you prefer.

リテラルの末尾を省略した場合、コンパイラーは、リテラルを、ほとんどの場合32ビットの符号付き数値にllしたいと想定します。intその大きな値を格納するには32ビットでは不十分であるため、警告が表示されます。を追加することにより、リテラルが値を格納するのに十分な大きさllのとして解釈される必要があることをコンパイラーに示します。long long

接尾辞は、関数を呼び出すオーバーロードを指定する場合にも役立ちます。例えば:

void foo(long long x) {}
void foo(int x) {}

int main()
{
    foo(0); // calls foo(int x)
    foo(0LL); // calls foo(long long x)
}
于 2010-08-29T15:08:29.490 に答える
9

long long intあなたは(または)で正しい考えを持っていましたが、警告を防ぐために、定数が:unsigned long long intであることをコンパイラに伝える必要があります。long long int

long long int value = 600851475143LL;

これらの「L」は小文字にすることができますが、使用しないことをお勧めします。フォントによっては、小文字の「L」は1桁(「1」)のように見えることがよくあります。

于 2010-08-29T15:09:12.063 に答える
6

GNUMPBignumライブラリをご覧くださいhttp://gmplib.org/

于 2010-08-29T15:09:49.363 に答える