問題: 番号「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 番号 (長い) 仕様