2012-05-11 12 views
1

問題:番号「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

+3

600851475143Lにように、末尾の「L」で表現する必要は、ない600851475143.ないことが原因となるべきであると 'number'はintとlongはないことにします。 .. – BoltClock

+0

申し訳ありませんが、私は私の問題を解決しようとしていました。 "2147483647"はintとして格納できる最大値です。私はこの数を超える数字はエラーを引き起こしていることに気付きました。私は将来の人々の潜在的な混乱を避けるためにオリジナルの投稿を編集しました。 – user1390463

答えて

4

は、このリテラル値に小さな 'L' を入れてください:

600851475143L 

理由は次のとおりです。

整数リテラルの型は長いです、それならば文字Lまたはlで終わります。それ以外の場合はint型です。小文字のlはあなたもこの表記を使用することができます。1.

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

桁と区別するのは難しいですので、あなたが、より明確にするために大文字のLを使用することをお勧めします。

600_851_475_143L 
+2

小さな「l」である必要はありませんが、それも大きなLになります。 – EJP

+3

小文字のLを使用することをお勧めします。小文字のLは、しばしば1(1)のように見えるためです。代わりに、大文字のLを使用してください。 – Brigham

+0

はい、ときどきlと1を区別することが難しいです。ありがとうございました。 –

4

"my program isn't registering the variable "number" as a long, it is registering it as a int".

これは間違っています。あなたはそれを長く宣言しました。それは長いです。

何を取得しなければならないかは、全く異なるものです.コンパイルエラーが定数600851475143にあります。600851475143Lを試してみてください。私はあなたがコンパイラのエラーメッセージをもっと慎重に読んでおけば、それを見たことがあるでしょう。

+0

ありがとう、私は後にさらなる研究をしました。私のコンパイラは「エラー:整数が大きすぎます:6008514751143」としか言いませんでした。 – user1390463

+1

@ user1390463まさに私が言ったように。コンパイラは何が間違っているかを正確に教えてくれました。あなたの最初の間違いは、メッセージがあなたに "変数を登録していません"と言ったことを長い間 "混乱させる"ことでした。 – EJP

12

ロングリテラルは、私はあなたのコードに2147483647を参照してください

+0

ジムありがとうございます。これは多くの助けとなりました。 – user1390463