CodeGym /Java Blog /Toto sisi /Java BigInteger 類
John Squirrels
等級 41
San Francisco

Java BigInteger 類

在 Toto sisi 群組發布

什麼是 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