私は大きな素数で、いくつかの計算を行うためのJavaプログラムを書いて、私はこのエラーを取得する:例外:入力文字列の場合:「1.0」
Exception in thread "main" java.lang.NumberFormatException: For input string: "1.0" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.math.BigInteger.<init>(BigInteger.java:338) at java.math.BigInteger.<init>(BigInteger.java:476) at Solution.sumOfDivisorsModulo(Solution.java:24) at Solution.main(Solution.java:49)
public static BigInteger sumOfDivisorsModulo(BigInteger n){
BigInteger sum = (n.add(one)).mod(MODULO);
for (BigInteger test = n.subtract(one); test.compareTo(new BigInteger(Double.toString(Math.sqrt(n.longValue())))) >= 0; test.subtract(one))
{
if(n.mod(test).compareTo(zero) == 0)
{
sum = sum.add(test);
sum = sum.add(n.divide(test));
sum = sum.mod(MODULO);
}
}
return sum;
}
public static void main(String[] args) {
int m = 2;
int a = 0;
primeList = new BigInteger[m];
fillList(m); // fills the list primeList with prime number up to the mth
BigInteger n = new BigInteger("1");
for (int i = 0; i < m; i++){
n.multiply(primeList[i].pow(a+i));
}
System.out.println(sumOfDivisorsModulo(n).toString()); // base10
}
one
とzero
はBigInteger("0")
とBigInteger("1")
として定義された変数です。 問題が何であるか把握するのに手伝ってもらえますか?私は事前に感謝します。
エラーメッセージ 'NumberFormatException:入力文字列:1.0 'は非常に明確です。特に、_double_値を持つ' BigInteger'を作成しようとすると、明らかです。おそらく、あなたは 'BigDecimal'を使いたいでしょうか? – Seelenvirtuose
組み込み時に独自の 'one'と' zero'を定義するのはなぜですか? ['BigInteger.ONE'](https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#ONE)と[' BigInteger.ZERO'](https:// docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#ZERO)。 – Andreas
また、 'sum.add(test)'と 'sum.add(n.divide(test))'は何もしませんよね?結果を 'sum'に代入するのを忘れました。あなたは 'sum = sum.mod(MODULO)'でそれを正しく得ました。 – Andreas