Co to jest klasa BigInteger?
W Javie istnieje kilka prymitywnych typów danych , takich jak int lub long, do wykonywania operacji na liczbach całkowitych. Jednak czasami musimy przechowywać duże liczby poza zakresem takich prymitywnych typów danych. Klasa BigInteger służy do obliczeń matematycznych dla bardzo dużych liczb. Zawiera wszystkie metody z pakietu java.lang.Math i analogi do wszystkich prymitywnych operatorów liczb całkowitych w Javie. Duża liczba całkowitaKlasa obejmuje operacje arytmetyki modularnej, manipulacje bitami, obliczenia GCD i kilka innych operacji. BigIntegers są reprezentowane w notacji z uzupełnieniem do dwóch. Nie ma teoretycznego ograniczenia co do tego, jak duża liczba może być przechowywana, ponieważ pamięć jest przydzielana dynamicznie. Jednak praktycznie pamięć jest ograniczona i możemy przechowywać liczbę całkowitą, która ma liczbę bitów mniejszą lub równą Integer.MAX_VALUE . Zapewnia to wystarczająco dużą górną granicę do przechowywania praktycznie wszystkich dużych liczb.Jak implementowana jest klasa BigInteger?
import java.math.BigInteger;
Aby zaimplementować klasę BigInteger w swoim kodzie, musisz zaimportować pakiet java.math.BigInteger .
Deklaracja klasy BigInteger
Klasa BigInteger w Javie jest zadeklarowana w następujący sposób w pakiecie java.math :public class BigInteger
extends Number
implements Comparable<BigInteger>
Klasa BigInteger rozszerza klasę Number i implementuje interfejs Comparable . Jest ona zadeklarowana i zdefiniowana w pakiecie java.math .
Konstruktory klas
Klasa BigInteger w Javie ma wiele przeciążonych konstruktorów. Możesz spróbować uruchomić każdy z nich w edytorze, aby zobaczyć, jak działają.Sr# | Konstruktor | Opis |
---|---|---|
1 | BigInteger(byte[] wartość) | Tłumaczy tablicę bajtów na BigInteger . |
2 | BigInteger(int signum, byte[] wielkość) | Tłumaczy reprezentację wielkości znaku na BigInteger . |
3 | BigInteger(int bitLength, int pewność, Random rnd) | Konstruuje losowo wygenerowaną dodatnią BigInteger o określonej długości. |
4 | BigInteger(wartość ciągu) | Tłumaczy reprezentację ciągu dziesiętnego na BigInteger . |
5 | BigInteger(String val, int radix) | Konwertuje reprezentację String w określonej podstawie na BigInteger . |
Metody klasowe
Klasa BigInteger w Javie ma wiele metod, z których niektóre opisano poniżej. W tabeli „this” reprezentuje liczbę BigInteger , która wywołuje metodę, a „ val ” to argument przekazany do metody.abs() | Zwraca wartość bezwzględną ' tej ' BigInteger . |
dodać() | Zwraca Biginteger , obliczając „ this + val ”. |
odejmować() | Zwraca Biginteger , obliczając „ this - val ”. |
dzielić() | Zwraca Biginteger , obliczając „ this / val ”. |
zwielokrotniać() | Zwraca Biginteger , obliczając „ this * val ”. |
wartość() | Zwraca wartość BigInteger o podanej wartości long . |
równa się() | Porównuje równość między ' this ' BigInteger a danym obiektem. |
pow() | Zwraca Biginteger , obliczając „ thisexponent ”. |
min() | Zwraca wartość minimalną między „ this ” BigInteger a podaną wartością. |
maks() | Zwraca wartość maksymalną między „ this ” BigInteger a podaną wartością. |
mod() | Zwraca wartość dla „ ten mod m ”. |
gcd() | Zwraca liczbę BigInteger , która jest największym wspólnym dzielnikiem między wartością bezwzględną „ this ” a „ przekazaną wartością ”. |
liczba bitów() | Zwraca liczbę bitów w uzupełnieniu do dwóch reprezentacji ' this ' BigInteger . |
długość bitu() | Zwraca liczbę bitów, z wyłączeniem bitu znaku, w minimalnej reprezentacji uzupełnienia do dwóch ' this ' BigInteger . |
I() | Zwraca Biginteger , obliczając „ this & val ”. |
Lub() | Zwraca Biginteger , obliczając ' this | wartość '. |
nie() | Zwraca liczbę Biginteger, obliczając „ ~to”. |
i nie() | Zwraca Biginteger przez obliczenie ' this & ~val '. |
intValue() | Konwertuje BigInteger na int . |
wartość zmiennoprzecinkowa() | Konwertuje BigInteger na float . |
długaWartość() | Konwertuje BigInteger na long . |
podwójna wartość() | Konwertuje BigInteger na double . |
toString() | Zwraca dziesiętną reprezentację ciągu BigInteger . |
Przykład 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));
}
}
Wyjście
15511210043330985984000000
Wyjaśnienie
W powyższym fragmencie współczynnik dużej liczby jest obliczany przy użyciu klasy BigInteger poprzez import pakietu java.math.BigInteger . Stworzyliśmy metodę obliczeniowąFacttorial . Ta metoda tworzy BigInteger , a następnie oblicza silnię przy użyciu metody mnożenia f.multiply(BigInteger.valueOf(i)) .Przykład 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);
}
}
Wyjście
60 - 20 = 40 60 + 20 = 80 60 * 20 = 1200 60 / 20 = 3 Wartość minimalna: 20 Wartość maksymalna: 60
Wyjaśnienie
W powyższym fragmencie stworzyliśmy dwie klasy BigInteger przy użyciu konstruktora BigInteger(String val) . Zastosowaliśmy różne metody na BigInteger s big1 i big2 z wartościami odpowiednio 20 i 60. Zastosowaliśmy następujące metody:- big2.subtract(big1) aby odjąć 20 od 60.
- big1.add(big2) , aby dodać 20 i 60.
- big1.multiply(duże2) , aby pomnożyć 20 i 60.
- big2.divide(big1) , aby podzielić 60 przez 20.
- big1.min(big2) , aby uzyskać mniejszą z dwóch wartości.
- big1.max(big2) , aby uzyskać większą z dwóch wartości.
GO TO FULL VERSION