CodeGym /Blog Java /Random-PL /Klasa BigInteger w Javie
Autor
Oleksandr Miadelets
Head of Developers Team at CodeGym

Klasa BigInteger w Javie

Opublikowano w grupie Random-PL

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 „ thisBigInteger a podaną wartością.
maks() Zwraca wartość maksymalną między „ thisBigInteger 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:
  1. big2.subtract(big1) aby odjąć 20 od 60.
  2. big1.add(big2) , aby dodać 20 i 60.
  3. big1.multiply(duże2) , aby pomnożyć 20 i 60.
  4. big2.divide(big1) , aby podzielić 60 przez 20.
  5. big1.min(big2) , aby uzyskać mniejszą z dwóch wartości.
  6. big1.max(big2) , aby uzyskać większą z dwóch wartości.
Należy zauważyć, że obiekt java.math.BigInteger jest importowany na początku kodu.

Wniosek

Do tej pory powinieneś być zaznajomiony z klasą BigInteger w Javie. Powinieneś być w stanie używać BigInteger s w swoim kodzie przy użyciu różnych typów konstruktorów. Powinieneś także być w stanie wykonywać na nich różne operacje arytmetyczne i logiczne przy użyciu metod klasy BigInteger . Jako wyzwanie możesz spróbować wywołać różne metody z różnymi wartościami BigInteger s. To jeszcze bardziej wzmocni twoje zrozumienie BigInteger s w Javie. Aby być bardziej pewnym swojej nauki, spróbuj ćwiczyć ją w kółko. Kluczem do dobrego kodowania jest praktyka. Powodzenia i szczęśliwego kodowania!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION