나는 큰 소수에 대한 몇 가지 계산을 수행하는 자바 프로그램을 쓰고 있어요, 나는이 오류를 얻을 :예외 : 입력 문자열 : "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
BigInteger("0")
및 zero
는 BigInteger("1")
과 같이 정의 된 변수이다. 문제의 원인을 파악하는 데 도움을 줄 수 있습니까? 미리 감사드립니다.
저에게있어서, 특히 NumberFormatException : For input string : "1.0"오류 메시지는 매우 명확합니다. 특히 _double_ 값으로'BigInteger'를 만들려고 할 때 특히 그렇습니다. BigDecimal을 사용하고 싶었 을까? – Seelenvirtuose
내장되어있을 때 왜 자신의 '하나'와 '제로'를 정의해야합니까? ['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