CodeGym /Java 博客 /随机的 /Java BigInteger 类
John Squirrels
第 41 级
San Francisco

Java BigInteger 类

已在 随机的 群组中发布

什么是 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 ”是传递给该方法的参数。
绝对() 它返回“ thisBigInteger的绝对值。
添加() 它通过计算“ this + val ”返回一个Biginteger
减去() 它通过计算“ this-val ”返回一个Biginteger
划分() 它通过计算“ this / val ”返回一个Biginteger
乘() 它通过计算“ this * val ”返回一个Biginteger
的价值() 它返回给定longBigInteger值。
等于() 它比较“ thisBigInteger和给定对象之间的相等性。
战俘() 它通过计算“ thisexponent ”返回一个Biginteger
分钟() 它返回“ thisBigInteger和给定值之间的最小值。
最大限度() 它返回“ thisBigInteger和给定值之间的最大值。
模型() 它返回“ this mod m ”的值。
gcd() 它返回一个BigInteger ,它是“ this ”的绝对值与“ passed value ”之间的最大公约数。
位计数() 它返回“ thisBigInteger的二进制补码表示中的位数。
位长() 它返回“ thisBigInteger的最小二进制补码表示中的位数,不包括符号位。
和() 它通过计算“ 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。我们对BigIntegerbig1big2分别应用了不同的方法,其值为 20 和 60。我们应用了以下方法:
  1. big2.subtract(big1)从 60 中减去 20。
  2. big1.add(big2)添加 20 和 60。
  3. big1.multiply(big2)乘以 20 和 60。
  4. big2.divide(big1)将 60 除以 20。
  5. big1.min(big2)获取两个值中较小的一个。
  6. big1.max(big2)获取两个值中较大的一个。
请务必注意,java.math.BigInteger是在代码顶部导入的。

结论

到目前为止,您应该熟悉Java 中的BigInteger类。您应该能够使用不同类型的构造函数在您的代码中使用BigInteger 。您还应该能够使用BigInteger类方法对它们执行不同的算术和逻辑运算。作为挑战,您可以尝试使用不同的BigInteger值调用不同的方法。它将进一步加强您对Java 中BigInteger的理解。为了对您的学习更有信心,请尝试一遍又一遍地练习。良好编码的关键是练习。祝你好运,编码愉快!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION