當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java BigInteger用法及代碼示例


BigInteger 類用於數學運算,該運算涉及超出所有可用原始數據類型限製的非常大的整數計算。

這樣一來,BigInteger類由於其龐大的方法庫,使用起來非常方便,並且在競技編程中也被大量使用。
下麵給出了原始算術中的簡單語句及其以 BigInteger 對象表示的類似語句的列表。

例子:

int a, b;                
BigInteger A, B; 

初始化如下:

a = 54;
b = 23;
A  = BigInteger.valueOf(54);
B  = BigInteger.valueOf(37); 

對於可用作字符串的整數,您可以按如下方式初始化它們:

A  = new BigInteger(“54”);
B  = new BigInteger(“123456789123456789”); 

為了便於初始化,BigInteger 類中還定義了一些常量,如下所示:

A = BigInteger.ONE;
// Other than this, available constant are BigInteger.ZERO 
// and BigInteger.TEN 

數學運算如下:

int c = a + b;
BigInteger C = A.add(B); 

其他類似的函數有subtract()、multiply()、divide()、remainder(),但所有這些函數都以BigInteger作為參數,因此如果我們想要對整數或字符串進行此操作,請在傳遞它們之前將它們轉換為BigInteger函數如下圖所示:

String str = “123456789”;
BigInteger C = A.add(new BigInteger(str));
int val  = 123456789;
BigInteger C = A.add(BigInteger.valueOf(val)); 

從BigInteger中提取值如下:

int x   =  A.intValue();   // value should be in limit of int x
long y   = A.longValue();  // value should be in limit of long y
String z = A.toString();  

比較

if (a < b) {}         // For primitive int
if (A.compareTo(B) < 0)  {} // For BigInteger 

實際上compareTo根據值返回-1(小於)、0(等於)、1(大於)。為了平等,我們還可以使用:

if (A.equals(B)) {}  // A is equal to B 

Methods of BigInteger Class

方法 執行的操作
add(BigInteger val) 返回值為 (this + val) 的BigInteger。
BigInteger abs() 返回一個 BigInteger,其值是此 BigInteger 的絕對值。
BigInteger and() 返回值為 (this & val) 的BigInteger。
BigInteger andNot()) 返回一個 BigInteger,其值為 (this & ~val)。
BigInteger bitCount() 返回此 BigInteger 的二進製補碼表示中與其符號位不同的位數。
BigInteger bitLength() 返回此 BigInteger 的最小補碼表示形式的位數,不包括符號位。
BigInteger byteValueExact() 將此 BigInteger 轉換為字節,檢查丟失的信息。
BigInteger clearBit() 返回BigInteger,其值等於指定位被清除的BigInteger。
BigInteger compareTo() 將此 BigInteger 與指定的 BigInteger 進行比較。
divide(BigInteger val) 返回值為 (this /val) 的BigInteger。
BigInteger divideAndRemainder() 返回兩個 BigIntegers 的數組,其中包含 (this /val) 後跟 (this % val)。
BigInteger doubleValue() 將此 BigInteger 轉換為雙精度值。
BigInteger equals() 將此 BigInteger 與指定對象進行比較是否相等。
BigInteger flipBit() 返回一個BigInteger,其值等於此BigInteger(指定位翻轉)。
BigInteger floatValue() 將此 BigInteger 轉換為浮點數。
gcd(BigInteger val) 返回一個BigInteger,其值為abs(this) 和abs(val) 的最大公約數。
BigInteger getLowestSetBit() 返回此 BigInteger 中最右邊(最低位)一位的索引(最右邊一位右側的零位的數量)。
hashCode() 返回此 BigInteger 的哈希碼。
BigInteger intValue() 將此 BigInteger 轉換為 int。
BigInteger intValueExact() 將此 BigInteger 轉換為 int,檢查丟失的信息。
isProbablePrime(int certainty) 如果 BigInteger 可能是素數,則返回 true;如果肯定是合數,則返回 false。
BigInteger longValue() 將此BigInteger 轉換為長整型。
BigInteger longValueExact() 將此 BigInteger 轉換為長整型,檢查丟失的信息。
BigInteger max()、min() 返回此 BigInteger 和 val 的最大值。
BigInteger max()、min()) 返回BigInteger 和 val 中的最小值。
BigInteger mod() 返回一個 BigInteger,其值為 (this mod m)。
Java.math.BigInteger.modInverse() 返回一個 BigInteger,其值為 (this-1 mod m)。
BigInteger modPow() 返回 BigInteger,其值為 (thisexponent mod m)。
multiply(BigInteger val) 返回一個 BigInteger,其值為 (this * val)。
BigInteger negate() 返回值為 (-this) 的BigInteger。
nextProbablePrime() 返回大於 BigInteger 的第一個整數,該整數可能是素數。
BigInteger not() 返回值為 (~this) 的BigInteger。
BigInteger or() 返回值為 (this | val) 的 BigInteger。
BigInteger pow() 返回值為 (thisexponent) 的 BigInteger。
Java.math.BigInteger.probablePrime() 返回一個正的BigInteger,它可能是素數,具有指定的位長度。
BigInteger remainder() 返回一個 BigInteger,其值為 (this % val)。
BigInteger setBit() 返回BigInteger,其值等於具有指定位設置的BigInteger。
BigInteger shiftLeft() 返回一個 BigInteger,其值為 (this << n)。
BigInteger shiftRight() 返回一個 BigInteger,其值為 (this >> n)。
BigInteger shortValueExact() 將此 BigInteger 轉換為短值,檢查丟失的信息。
BigInteger signum() 返回此 BigInteger 的符號函數。
BigInteger sqrt() 返回此 BigInteger 的整數平方根。
sqrtAndRemainder() 返回兩個 BigIntegers 的數組,分別包含 this 的整數平方根 s 及其餘數 this - s*s。
subtract(BigInteger val) 返回值為 (this - val) 的 BigInteger。
BigInteger testBit() 當且僅當設置了指定位時返回 true。
BigInteger toByteArray() 返回一個字節數組,其中包含此 BigInteger 的補碼表示形式。
BigInteger toString() 返回此 BigInteger 的十進製字符串表示形式。
BigInteger toString() 返回給定基數中此 BigInteger 的字符串表示形式。
BigInteger valueOf() 返回一個BigInteger,其值等於指定的 long 值。
BigInteger xor() 返回一個 BigInteger,其值為 (this^val)。

示例:

100 的階乘包含 158 位數字,因此我們無法將其存儲在任何可用的原始數據類型中。我們可以在其中存儲任意大的整數。範圍的上限沒有理論上的限製,因為內存是動態分配的,但實際上,由於內存有限,您可以存儲一個具有 Integer.MAX_VALUE 位的數字,這應該足以存儲幾乎所有大值。

例子:

Java


// Java program to find large factorials using BigInteger
import java.math.BigInteger;
import java.util.Scanner;
public class Example
{
    // Returns Factorial of N
    static BigInteger factorial(int N)
    {
        // Initialize result
        BigInteger f = new BigInteger("1"); // Or BigInteger.ONE
        // Multiply f with 2, 3, ...N
        for (int i = 2; i <= N; i++)
            f = f.multiply(BigInteger.valueOf(i));
        return f;
    }
    // Driver method
    public static void main(String args[]) throws Exception
    {
        int N = 20;
        System.out.println(factorial(N));
    }
}

輸出:

2432902008176640000

Tip: If we have to write above program in C++, that would be too large and complex, we can look at Factorial of Large Number

所以有了以上BigInteger類的函數知識之後,我們就可以輕鬆解決很多複雜的問題了,但是要記住,由於BigInteger類內部使用的是整數數組來進行處理,所以對BigIntegers對象的操作並不像BigIntegers類那樣。與 BigIntgers 上的 add 函數的原語一樣快,並不需要恒定的時間,它所花費的時間與 BigInteger 的長度成正比,因此程序的複雜性將相應改變。

必讀:



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 BigInteger Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。