問題:番号「600851475143」を保存できません。この数値は、intが保持できる値よりも大きく、最大値よりも小さいことが分かります。しかし、私のプログラムは変数 "number"をlongとして登録していないので、intとして登録しています。誰かがこの問題に光を当てることはできますか?Javaの誤ったプリミティブデータ型ですか?
** - 問題のライン
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;
}
}
SOLUTION:ジムは以下の言ったように、long型のために、1がで "L" または "L" を入れて持っています番号の終わり。 "整数のリテラルは、文字Lまたはlで終わる場合はlong型、それ以外の場合はint型です。小文字のlは数字と区別しづらいため、大文字のLを使用することをお勧めします1. " - プリミティブ型のOracleサイトから。
もう少し情報: Java's L number (long) specification
600851475143L
にように、末尾の「L」で表現する必要は、ない600851475143.ないことが原因となるべきであると 'number'はintとlongはないことにします。 .. – BoltClock申し訳ありませんが、私は私の問題を解決しようとしていました。 "2147483647"はintとして格納できる最大値です。私はこの数を超える数字はエラーを引き起こしていることに気付きました。私は将来の人々の潜在的な混乱を避けるためにオリジナルの投稿を編集しました。 – user1390463