Java新手求助:如何在if语句中判断BigInteger能否被2、12、15整除
解决BigInteger判断整除的问题
嘿,别着急,我来帮你搞定这个BigInteger的整除判断问题!
首先咱们先拆解你代码里的两个问题:
- 第一个写法
if (num.mod(two).equals("0"))不对,因为num.mod(two)返回的是BigInteger对象,而你把它和字符串"0"做比较,类型完全不匹配,肯定不会得到正确结果。 - 第二个注释里的
if(num % two == 0)也行不通,%运算符只支持Java的基本数值类型(比如int、long),BigInteger是引用类型,没法用这个运算符做运算。
正确的实现方式
BigInteger类已经给咱们提供了合适的方法来处理整除判断,这里有两种常用的思路:
方法1:用mod()配合BigInteger.ZERO比较
num.mod(divisor)会返回num除以divisor的余数,我们只需要判断这个余数是否等于BigInteger.ZERO(这是BigInteger预定义的常量,代表0,比自己new更规范):
import java.math.BigInteger; public class PrExMa { public static void main(String[] args) { // 初始化变量,用BigInteger的内置常量更简洁 BigInteger num = new BigInteger("16"); BigInteger two = BigInteger.TWO; BigInteger twelve = new BigInteger("12"); BigInteger fifteen = new BigInteger("15"); // 判断能否被2整除 if (num.mod(two).equals(BigInteger.ZERO)) { System.out.println(num + " 能被2整除"); } else { System.out.println(num + " 不能被2整除"); } // 判断能否被12整除 if (num.mod(twelve).equals(BigInteger.ZERO)) { System.out.println(num + " 能被12整除"); } else { System.out.println(num + " 不能被12整除"); } // 判断能否被15整除 if (num.mod(fifteen).equals(BigInteger.ZERO)) { System.out.println(num + " 能被15整除"); } else { System.out.println(num + " 不能被15整除"); } } }
方法2:用divideAndRemainder()方法
这个方法会返回一个BigInteger数组,第一个元素是商,第二个是余数,我们可以直接检查余数是否为0:
// 示例:判断能否被2整除 BigInteger[] result = num.divideAndRemainder(two); if (result[1].equals(BigInteger.ZERO)) { System.out.println(num + " 能被2整除"); }
额外小建议
- 尽量使用BigInteger提供的内置常量,比如
BigInteger.TWO、BigInteger.ZERO,不用自己手动new,代码更简洁规范。 - 如果需要同时判断多个除数的整除情况,可以把除数放到数组里,用循环遍历判断,减少重复代码。
内容的提问来源于stack exchange,提问作者Perebraco
相关产品推荐
相关产品推荐

