大数字运算BigInteger

在Java中提供了大数字的操作类,即java.math.BigInteger类与 java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger类 是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。

BigInteger类型的数字范围较Integer类型的数字范围要大得多。前文 介绍过Integer是int的包装类,int的最大值为231-1,如果要计算更大的数 字,使用Integer数据类型就无法实现了,所以Java中提供了BigInteger类 来处理更大的数字。BigInteger支持任意精度的整数,也就是说,在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失信 息。

在BigInteger类中封装了多种操作,除了基本的加、减、乘、除操 作之外,还提供了绝对值、相反数、最大公约数以及判断是否为质数等 操作。

使用BigInteger类,可以实例化一个BigInteger对象,并自动调用相 应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式 是参数以字符串形式代表要处理的数字。 语法如下:

public BigInteger(String val)

其中,val是十进制字符串。

如果将2转换为BigInteger类型,可以使用以下语句进行初始化操作:

BigInteger twoInstance=new BigInteger("2"); //将十进制2转换为B

注意:参数2的双引号不能省略,因为参数是以字符串的形式存在的。

一旦创建了对象实例,就可以调用BigInteger类中的一些方法进行 运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值 等操作。下面列举了BigInteger类中常用的几种运算方法。

  • public BigInteger add(BigInteger val):做加法运算。
  • public BigInteger subtract(BigInteger val):做减法运算。
  • public BigInteger multiply(BigInteger val):做乘法运算。
  • public BigInteger divide(BigInteger val):做除法运算。
  • public BigInteger remainder(BigInteger val):做取余操作。
  • public BigInteger[] divideAndRemainder(BigInteger val):用数组返 回余数和商,结果数组中第一个值为商,第二个值为余数。
  • public BigInteger pow(int exponent):进行取参数的exponent次方操作。
  • public BigInteger negate():取相反数。
  • public BigInteger shiftLeft(int n):将数字左移n位,如果n为负数, 做右移操作。
  • public BigInteger shiftRight(int n):将数字右移n位,如果n为负 数,做左移操作。
  • public BigInteger and(BigInteger val):做与操作。
  • public BigInteger or(BigInteger val):做或操作。
  • public int compareTo(BigInteger val):做数字比较操作。
  • public boolean equals(Object x):当参数x是BigInteger类型的数字 并且数值相等时,返回true。
  • public BigInteger min(BigInteger val):返回较小的数值。
  • public BigInteger max(BigInteger val):返回较大的数值。

【例】在项目中创建BigIntegerDemo类,在类的主方法中创建 BigInteger类的实例对象,调用该对象的各种方法实现大整数的加、 减、乘、除和其他运算,并输出运算结果。

import java.math.*;

public class BigIntegerDemo {
	public static void main(String[] args) {
		BigInteger bigInstance = new BigInteger("4"); // 实例化一个大数字
		// 取该大数字加2的操作
		System.out.println("加法操作:" + bigInstance.add(new BigInteger("2")));
		// 取该大数字减2的操作
		System.out.println("减法操作:"
				+ bigInstance.subtract(new BigInteger("2")));
		// 取该大数字乘以2的操作
		System.out.println("乘法操作:"
				+ bigInstance.multiply(new BigInteger("2")));
		// 取该大数字除以2的操作
		System.out.println("除法操作:"
				+ bigInstance.divide(new BigInteger("2")));
		// 取该大数字除以3的商
		System.out.println("取商:"
				+ bigInstance.divideAndRemainder(new BigInteger("3"))[0]);
		// 取该大数字除以3的余数
		System.out.println("取余数:"
				+ bigInstance.divideAndRemainder(new BigInteger("3"))[1]);
		// 取该大数字的2次方
		System.out.println("做2次方操作:" + bigInstance.pow(2));
		// 取该大数字的相反数
		System.out.println("取相反数操作:" + bigInstance.negate());
	}
}
操作大数字
操作大数字

在本实例中需要注意的是divideAndRemainder()方法,这个方法做 除法操作,以数组的形式返回,数组中第一个值为做除法的商,第二个 值为做除法的余数。

发表评论