Java 中如何测试一个 BigDecimal 对象是否可以被另一个 BigDecimal 整除?

问题描述 投票:0回答:1

我正在解决 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
方法检查整除性。

任何有关我当前方法的建议将不胜感激。

java division bigdecimal
1个回答
0
投票

你没有无限循环。你的增量是如此之小,以至于除法需要很多很多次迭代才能最终找到一个能被 2 或 3 整除的数字。如果我将增量更改为 0.01,我几乎立即得到结果。

© www.soinside.com 2019 - 2024. All rights reserved.