1

問題: 番号「600851475143」を保存できません。この数値は、int が保持できる数値よりも大きく、long の最大値よりも小さいことに気付きました。ただし、私のプログラムは変数「number」を long として登録しておらず、int として登録しています。誰かがこの問題に光を当てることができますか?

** - 問題の行

public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
  ***long number = 600851475143 , total = 0;
    for(long x = (number-1)/2; x>1; x--)
      if(number%x == 0 && isPrime(x)) total += x;
    System.out.println(total);
}
private static boolean isPrime(long determine){
  for(long x = determine/2 - 1; x>1; x--)
    if(determine%x ==0) return false;
  return true;
}

}

解決策: ジムが以下で言ったように、長いタイプにするためには、数字の最後に「L」または「l」を付ける必要があります。「整数リテラルは、文字 L または l で終わる場合は long 型です。それ以外の場合は int 型です。小文字の l は数字の 1 と区別するのが難しいため、大文字の L を使用することをお勧めします。 ." - プリミティブ型に関する Oracle サイトから。

もう少し情報: Java の L 番号 (長い) 仕様

4

3 に答える 3

12

長いリテラルは、次のように末尾に「L」を付けて表現する必要があります。600851475143L

于 2012-05-11T23:48:49.907 に答える
4

このリテラル値に小さな「L」を入れます。

 600851475143L

その理由は:

整数リテラルは、文字Lまたはlで終わる場合、long型です。それ以外の場合は、int型です。小文字のlは数字の1と区別しにくいため、大文字のLを使用することをお勧めします。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

より明確にするために、この表記も使用できます。

 600_851_475_143L
于 2012-05-11T23:47:49.940 に答える
4

「私のプログラムは変数「number」をlongとして登録していません、それをintとして登録しています」。

それは正しくありません。あなたはそれを長いと宣言しました。長いです。

取得しなければならないのは、まったく異なるものです。定数600851475143のコンパイルエラーです。600851475143Lを試してください。コンパイラのエラーメッセージをもっと注意深く読めば、それを見たことがあるでしょう。

于 2012-05-11T23:48:45.513 に答える