您的位置:

Java BigInteger用法详解

一、BigInteger基本用法

BigInteger类位于java.math包中,是一种可以处理任意精度整数的类,可以处理包含数百位甚至数千位的整数。BigInteger类中定义了多个操作BigInteger对象的方法,常用的方法有:

1. BigInteger(String val):通过字符串创建一个BigInteger对象。

BigInteger num = new BigInteger("123456789");

2. BigInteger add(BigInteger val):将此BigInteger的值与val的值相加,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("1234567890");
BigInteger num2 = new BigInteger("9876543210");
BigInteger result = num1.add(num2);
System.out.println(result.toString()); //输出:11111111100

3. BigInteger subtract(BigInteger val):将此BigInteger的值与val的值相减,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("9876543210");
BigInteger num2 = new BigInteger("1234567890");
BigInteger result = num1.subtract(num2);
System.out.println(result.toString()); //输出:8641975320

4. BigInteger multiply(BigInteger val):将此BigInteger的值与val的值相乘,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("123456789");
BigInteger num2 = new BigInteger("987654321");
BigInteger result = num1.multiply(num2);
System.out.println(result.toString()); //输出:121932631137021426

5. BigInteger divide(BigInteger val):将此BigInteger的值与val的值相除,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("9876543210");
BigInteger num2 = new BigInteger("123456789");
BigInteger result = num1.divide(num2);
System.out.println(result.toString()); //输出:79

二、BigInteger高级用法

BigInteger类可以进行取模、比较大小、幂运算等高级操作。

1. BigInteger mod(BigInteger val):将此BigInteger的值与val的值取模,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("9876543210");
BigInteger num2 = new BigInteger("123456789");
BigInteger result = num1.mod(num2);
System.out.println(result.toString()); //输出:24660942

2. BigInteger compareTo(BigInteger val):将此BigInteger与val进行比较,返回-1、0或1。如果此BigInteger小于val,则返回-1;如果此BigInteger等于val,则返回0;如果此BigInteger大于val,则返回1。

BigInteger num1 = new BigInteger("9876543210");
BigInteger num2 = new BigInteger("123456789");
int result = num1.compareTo(num2);
System.out.println(result); //输出:1

3. BigInteger pow(int exponent):将此BigInteger的值乘以自身exponent次幂,返回一个新的BigInteger对象。

BigInteger num1 = new BigInteger("123456789");
BigInteger result = num1.pow(3);
System.out.println(result.toString()); //输出:188167637178915486089021

三、BigInteger使用注意事项

在处理极大整数的时候,常常会使用BigInteger类进行求解。但是需要注意以下几点:

1. 由于BigInteger是一个类,因此不能使用运算符直接进行数值计算,需要使用它提供的add、subtract、multiply、divide等方法进行计算。

//错误示例
BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");
BigInteger c = a + b; //编译错误

//正确示例
BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");
BigInteger c = a.add(b); //调用add方法进行相加

2. 在比较两个BigInteger大小时,不要使用“==”或“!=”运算符,需要使用compareTo方法。

//错误示例
BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");
if (a > b) {} //编译错误

//正确示例
BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");
if (a.compareTo(b) > 0) {} //调用compareTo方法进行比较

3. BigInteger是一个不可变类,因此任何的算术运算都不会对原来的BigInteger对象造成改变,而是返回一个新的对象。

BigInteger a = new BigInteger("1234567890");
BigInteger b = new BigInteger("9876543210");
a.add(b);
System.out.println(a.toString()); //输出:1234567890

四、小结

BigInteger提供了一种处理大整数的有效方法,可以在没有精度限制的情况下对整数进行计算。但需要注意的是,在使用BigInteger进行数值计算时,需要使用它提供的方法进行计算,比如add、subtract、multiply、divide等方法,并且使用compareTo方法进行比较大小。

如果处理的精度在double或者long范围内,则可以使用原生的double和long类型进行计算,因为这些类型有更高的效率。