我制作了在两个数字之间获取GCD(最大公共分区)的代码。 这是因为我应该输入第19位的数字,我想我需要使用BigInteger Math类。但是,在编译我的代码后,我有这个错误。
线程“main”中的异常java.lang.ArithmeticException:BigInteger:模数不为正 java.math.BigInteger.mod(BigInteger.java:2415)at test.GCD(test.java:9)at test.GCD(test.java:9)at test.GCD(test.java:9)at test.GCD(test.java:9)at test.main(test.java:22)
这是我的代码。
import java.util.*;
import java.math.BigInteger;
public class test {
public static BigInteger GCD(BigInteger a, BigInteger b) {
if (b.equals(0))
return a;
else
return GCD(b, a.mod(b));
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger p = BigInteger.valueOf(1);
BigInteger q = BigInteger.valueOf(1);
BigInteger i = BigInteger.ONE;
BigInteger z = BigInteger.ONE;
p = sc.nextBigInteger();
q = sc.nextBigInteger();
while (true) {
if (GCD(p, q).compareTo(i) == -1) {
System.out.print("1");
}
else if(GCD(p, q).compareTo(i) == 0) {
System.out.print("1");
}
else if(GCD(p,q).compareTo(i) == 1) {
break;
}
i.add(z);
}
}
}
没有语法错误。
答案 0 :(得分:1)
问题在于基本陈述
if (b.equals(0))
试图将BigInteger b
与明确不相等的盒装整数0
进行比较,导致0
致命地传递为模数。你可以用
if (b.equals(BigInteger.ZERO)) {