什么是 BigInteger 类?
Java 中有一些原始数据类型用于执行整数运算,例如 int 或 long。然而,有时我们需要在这种原始数据类型的范围之外存储大量数字。BigInteger类用于非常大的数字的数学计算。它提供了java.lang.Math包中的所有方法和所有 Java 原始整数运算符的类似物。 大整数课程涵盖模运算、位操作、GCD 计算和一些其他操作。BigIntegers 以补码表示法表示。由于内存是动态分配的,因此理论上可以存储多大的数字没有限制。然而,实际上内存是有限的,我们可以存储一个位数小于或等于 Integer.MAX_VALUE 的整数。这提供了一个足够大的上限来存储几乎所有的大数。BigInteger 类是如何实现的?
import java.math.BigInteger;
要在您的代码中实现BigInteger类,您需要导入java.math.BigInteger包。
BigInteger 类声明
Java中的BigInteger类在java.math包中的声明方式如下:
public class BigInteger
extends Number
implements Comparable<BigInteger>
BigInteger类扩展了Number类并实现了Comparable接口。它在java.math包中声明和定义。
类构造函数
Java 的BigInteger类有许多重载的构造函数。您可以尝试在编辑器中运行每一个,看看它们是如何工作的。高级# | 构造函数 | 描述 |
---|---|---|
1个 | BigInteger(byte[] 值) | 将字节数组转换为BigInteger。 |
2个 | BigInteger(int signum, byte[] magnitude) | 将符号幅度表示转换为BigInteger。 |
3个 | BigInteger(int bitLength, int certainty, Random rnd) | 构造一个随机生成的指定长度的正BigInteger 。 |
4个 | 大整数(字符串值) | 将十进制字符串表示形式转换为BigInteger。 |
5个 | BigInteger(String val, int radix) | 将指定基数中的String表示形式转换为BigInteger。 |
类方法
Java 的BigInteger类有很多方法,下面介绍其中的一些方法。在表中,“this”代表调用该方法的BigInteger ,“ val ”是传递给该方法的参数。绝对() | 它返回“ this ” BigInteger的绝对值。 |
添加() | 它通过计算“ this + val ”返回一个Biginteger。 |
减去() | 它通过计算“ this-val ”返回一个Biginteger。 |
划分() | 它通过计算“ this / val ”返回一个Biginteger。 |
乘() | 它通过计算“ this * val ”返回一个Biginteger。 |
的价值() | 它返回给定long的BigInteger值。 |
等于() | 它比较“ this ” BigInteger和给定对象之间的相等性。 |
战俘() | 它通过计算“ thisexponent ”返回一个Biginteger。 |
分钟() | 它返回“ this ” BigInteger和给定值之间的最小值。 |
最大限度() | 它返回“ this ” BigInteger和给定值之间的最大值。 |
模型() | 它返回“ this mod m ”的值。 |
gcd() | 它返回一个BigInteger ,它是“ this ”的绝对值与“ passed value ”之间的最大公约数。 |
位计数() | 它返回“ this ” BigInteger的二进制补码表示中的位数。 |
位长() | 它返回“ this ” BigInteger的最小二进制补码表示中的位数,不包括符号位。 |
和() | 它通过计算“ this & val ”返回一个Biginteger。 |
或者() | 它通过计算 ' this |返回一个Biginteger 瓦尔'。 |
不是() | 它通过计算“ ~this”返回一个 Biginteger。 |
并不是() | 它通过计算“ this & ~val ”返回一个Biginteger。 |
整数值() | 它将BigInteger转换为int。 |
浮动值() | 它将BigInteger转换为float。 |
长值() | 它将BigInteger转换为long。 |
双值() | 它将BigInteger转换为double。 |
toString() | 它返回BigInteger的十进制字符串表示形式。 |
示例 1
import java.math.BigInteger;
public class Example1 {
static BigInteger calculateFactorial(int val) {
// Initialize result
BigInteger f = BigInteger.ONE; // Or new BigInteger("1")
// compute factorial
for (int i = 2; i <= val; i++) {
f = f.multiply(BigInteger.valueOf(i));
}
return f;
}
// Driver method
public static void main(String[] args) {
int val = 25;
System.out.println(calculateFactorial(val));
}
}
输出
15511210043330985984000000
解释
在上面的代码片段中,通过导入java.math.BigInteger包,使用BigInteger类计算大数的因子。我们创建了一个calculateFactorial方法。此方法创建一个BigInteger,然后使用乘法f.multiply(BigInteger.valueOf(i))计算阶乘。示例 2
import java.math.BigInteger;
public class Example2 {
public static void main(String[] args) {
BigInteger big1 = new BigInteger("20");
BigInteger big2 = new BigInteger("60");
BigInteger sub = big2.subtract(big1);
System.out.println(big2 + " - " + big1 + " = " + sub);
BigInteger add = big1.add(big2);
System.out.println(big1 + " + " + big2 + " = " + add);
BigInteger mul = big1.multiply(big2);
System.out.println(big1 + " * " + big2 + " = " + mul);
BigInteger div = big2.divide(big1);
System.out.println(big2 + " / " + big1 + " = " + div);
BigInteger min = big1.min(big2);
System.out.println("min value: " + min);
BigInteger max = big1.max(big2);
System.out.println("max value: " + max);
}
}
输出
60 - 20 = 40 60 + 20 = 80 60 * 20 = 1200 60 / 20 = 3 最小值:20 最大值:60
解释
在上面的代码片段中,我们使用BigInteger(String val)构造函数创建了两个BigInteger。我们对BigInteger的big1和big2分别应用了不同的方法,其值为 20 和 60。我们应用了以下方法:- big2.subtract(big1)从 60 中减去 20。
- big1.add(big2)添加 20 和 60。
- big1.multiply(big2)乘以 20 和 60。
- big2.divide(big1)将 60 除以 20。
- big1.min(big2)获取两个值中较小的一个。
- big1.max(big2)获取两个值中较大的一个。
GO TO FULL VERSION