问题阐述
Java中基本类型都有取值范围,例如short类型的范围是-32768~32767。如果我想计算一些超过基本类型范围的数值,该如何实现?
专家解答
对于整数,可以使用BigInteger类实现高精度运算。该类通过定义的各种方法完成运算,基本运算如表10.5所示。
表10.5 BigInteger类中基本数学运算方法
下面的程序演示了如何使用BigInteger类完成基本数学运算,代码如下。
public classBasicMathOperation {
public static void main(String[] args) {
BigInteger number1 = newBigInteger("13"); //创建表示13的BigInteger对象
BigInteger number2 = newBigInteger("3"); //创建表示3的BigInteger对象
BigInteger add = number1.add(number2); //计算13 + 3的结果
BigInteger subtract =number1.subtract(number2); //计算13 - 3的结果
BigInteger multiply =number1.multiply(number2); //计算13 * 3的结果
BigInteger divide =number1.divide(number2); //计算13 / 3的结果
BigInteger remainder =number1.remainder(number2); //计算13 % 3的结果
BigInteger negate = number1.negate(); //计算13的相反数
System.out.println("number1 =" + number1);
System.out.println("number2 =" + number2);
System.out.println("number1 +number2 = " + add);
System.out.println("number1 -number2 = " + subtract);
System.out.println("number1 *number2 = " + multiply);
System.out.println("number1 /number2 = " + divide);
System.out.println("number1 %number2 = " + remainder);
System.out.println("-number1 =" + negate);
}
}
程序的运行效果如图10.3所示。
图10.3 使用BigInteger类完成基本运算
除了基本运算,该类还实现了一些增强运算,其方法说明如表10.6所示。
表10.6 BigInteger类中增强数学运算方法
下面的程序演示了如何使用BigInteger类完成增强数学运算,代码如下。
public classExpanededMathOperation {
public static void main(String[] args) {
BigInteger number1 = newBigInteger("-13");
BigInteger number2 = newBigInteger("3");
BigInteger abs = number1.abs(); //计算-13的绝对值
// 计算-13 / 3 的商和余数
BigInteger[] divideAndRemainder =number1.divideAndRemainder(number2);
BigInteger gcd = number1.gcd(number2); //计算-13和3的最大公约数
BigInteger max = number1.max(number2); //计算-13和3的最大值
BigInteger min = number1.min(number2); // 计算-13和3的最小值
BigInteger mod = number1.mod(number2); // 计算-13 mod 3的值
BigInteger modInverse =number1.modInverse(number2); //计算-13^-1 mod 3的值
// 计算(-13)^2mod 3的值
BigInteger modPow = number1.modPow(newBigInteger("2"), number2);
BigInteger pow = number1.pow(2); //计算(-13)^2的值
int signum = number1.signum(); //计算3的符号
System.out.println("number1 =" + number1);
System.out.println("number2 =" + number2);
System.out.println("|number1| =" + abs);
System.out.println("number1 /number2 = " + divideAndRemainder[0]);
System.out.println("number1 %number2 = " + divideAndRemainder[1]);
System.out.println("gcd(number1,number2) = " + gcd);
System.out.println("max(number1,number2)= " + max);
System.out.println("min(number1,number2) = " + min);
System.out.println("number1 modnumber2 = " + mod);
System.out.println("number1^-1 modnumber2 = " + modInverse);
System.out.println("number1^2 modenumber2 = " + modPow);
System.out.println("number1^2 =" + pow);
System.out.println("number1的符号:" + signum);
}
}
程序的运行效果如图10.4所示。
图10.4 使用BigInteger类完成增强运算
专家点评
编程过程中,使用BigInteger类的机会较少。常用的基本数据类型,如long和double已经能够满足大多数运算需求。使用BigInteger类不仅编写代码量会增加,而且性能也会降低。这里采用了以时间换精度的思想。
关于【C语言编程锦囊】,可能你还想知道:
领取专属 10元无门槛券
私享最新 技术干货