一、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类型进行计算,因为这些类型有更高的效率。