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 的長度成正比,因此程序的複雜性將相應改變。
必讀:
相關用法
- Java BigInteger divideAndRemainder()用法及代碼示例
- Java BigInteger max()用法及代碼示例
- Java BigInteger min()用法及代碼示例
- Java BigInteger modInverse()用法及代碼示例
- Java BigInteger probablePrime()用法及代碼示例
- Java BigInteger abs()用法及代碼示例
- Java BigInteger add()用法及代碼示例
- Java BigInteger and()用法及代碼示例
- Java BigInteger andNot()用法及代碼示例
- Java BigInteger bitCount()用法及代碼示例
- Java BigInteger bitLength()用法及代碼示例
- Java BigInteger clearBit()用法及代碼示例
- Java BigInteger compareTo()用法及代碼示例
- Java BigInteger divide()用法及代碼示例
- Java BigInteger doubleValue()用法及代碼示例
- Java BigInteger equals()用法及代碼示例
- Java BigInteger flipBit()用法及代碼示例
- Java BigInteger floatValue()用法及代碼示例
- Java BigInteger gcd()用法及代碼示例
- Java BigInteger getLowestSetBit()用法及代碼示例
- Java BigInteger hashCode()用法及代碼示例
- Java BigInteger intValue()用法及代碼示例
- Java BigInteger intValueExact()用法及代碼示例
- Java BigInteger isProbablePrime()用法及代碼示例
- Java BigInteger longValue()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 BigInteger Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。