BigInteger.add în Java

Adunare, scădere, înmulțire și împărțire întreagă cu BigInteger, fără depășire.

Sintaxă
BigInteger add(BigInteger alt)
BigInteger subtract(BigInteger alt)
BigInteger multiply(BigInteger alt)
BigInteger divide(BigInteger alt)

Ce face BigInteger.add

a.add(b) și a.multiply(b) returnează un BigInteger nou cu rezultatul exact, oricât de mare. subtract scade, iar divide face împărțirea întreagă (ca / la int: partea fracționară se pierde).

Pentru a aduna într-o buclă păstrezi rezultatul: suma = suma.add(x). Un exemplu clasic este factorialul, care crește foarte repede: 25! are 26 de cifre.

Parametri

Parametru Descriere
alt Al doilea număr.

Ce returnează

Un BigInteger nou.

Exemple

Exemplul 1: Factorialul lui 30

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger f = BigInteger.ONE;
        for (int i = 2; i <= 30; i++) {
            f = f.multiply(BigInteger.valueOf(i));
        }
        System.out.println("30! = " + f);
        System.out.println("Cifre: " + f.toString().length());
    }
}

Rezultat

30! = 265252859812191058636308480000000
Cifre: 33

Exemplul 2: Fibonacci: al 100-lea termen

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger a = BigInteger.ZERO;
        BigInteger b = BigInteger.ONE;
        for (int i = 0; i < 100; i++) {
            BigInteger urm = a.add(b);
            a = b;
            b = urm;
        }
        System.out.println("F(100) = " + a);
    }
}

Rezultat

F(100) = 354224848179261915075

Exemplul 3: Scădere și împărțire întreagă

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger populatieLume = new BigInteger("8100000000");
        BigInteger populatieRomania = new BigInteger("19000000");
        System.out.println("Diferența: " + populatieLume.subtract(populatieRomania));
        System.out.println("De câte ori mai mult: " + populatieLume.divide(populatieRomania));
    }
}

Rezultat

Diferența: 8081000000
De câte ori mai mult: 426

Greșeli frecvente

  • Apelezi f.multiply(x); fără atribuire. f rămâne neschimbat; scrie f = f.multiply(x);.
  • Te aștepți ca divide să dea zecimale. Este împărțire întreagă; pentru zecimale folosește BigDecimal.

Comenzi înrudite

  • BigInteger: Întreg fără limită de mărime (cât îl lasă memoria); BigInteger.valueOf(n) îl creează dintr-un long.
  • BigInteger.pow: pow ridică la putere (2^100 exact); mod dă restul împărțirii, mereu pozitiv; modPow calculează rapid (a^b) mod m.
  • BigDecimal.add: Adunare, scădere și înmulțire exactă între BigDecimal; fiecare returnează un număr nou.