JAVA BigInteger class error: BigInteger: modulus not positive
JAVA BigInteger class error: BigInteger: modulus not positive
我编写了用于获取两个数字之间的 GCD(最大公除法)的代码。
这是因为我应该在第 19 位输入数字,我想我需要使用 BigInteger Math class。但是,在我编译代码后出现此错误。
Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive at
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);
}
}
}
没有语法错误。
基本语句有问题
if (b.equals(0))
试图将 BigInteger b
与盒装整数 0
进行比较,后者显然不相等,导致 0
致命地作为模数传递。你可以使用
if (b.equals(BigInteger.ZERO)) {
我编写了用于获取两个数字之间的 GCD(最大公除法)的代码。 这是因为我应该在第 19 位输入数字,我想我需要使用 BigInteger Math class。但是,在我编译代码后出现此错误。
Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive at 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);
}
}
}
没有语法错误。
基本语句有问题
if (b.equals(0))
试图将 BigInteger b
与盒装整数 0
进行比较,后者显然不相等,导致 0
致命地作为模数传递。你可以使用
if (b.equals(BigInteger.ZERO)) {