我正在解决 Java 教科书中的一个问题,该问题要求找到前 10 个可被 2 或 3 整除的 50 位小数数字。这是我的代码:
import java.math.*;
public class Divisible {
public static void main(String[] args) {
BigDecimal numbers = new BigDecimal("0.00000000000000000000000000000000000000000000000000");
BigDecimal number2 = new BigDecimal("2.0");
BigDecimal number3 = new BigDecimal("3.0");
BigDecimal increment = new BigDecimal("0.00000000000000000000000000000000000000000000000001");
int count = 0;
while (count < 10) {
boolean isDivisibleBy2 = isDivisible(numbers, number2);
boolean isDivisibleBy3 = isDivisible(numbers, number3);
if (isDivisibleBy2 || isDivisibleBy3) {
System.out.println(numbers);
count++;
} else {
System.out.println("No divisor.");
}
numbers = numbers.add(increment);
}
}
private static boolean isDivisible(BigDecimal number, BigDecimal divisor) {
BigDecimal remainder = number.remainder(divisor);
return remainder.compareTo(BigDecimal.ZERO) == 0;
}
}
但是这段代码陷入了“无除数”的无限循环。
我认为问题出在
isDivisible
方法中,该方法使用 remainder
方法检查整除性。
任何有关我当前方法的建议将不胜感激。
你没有无限循环。你的增量是如此之小,以至于除法需要很多很多次迭代才能最终找到一个能被 2 或 3 整除的数字。如果我将增量更改为 0.01,我几乎立即得到结果。