Test: Descubre qué bootcamp es para ti

whatsapp keepcoding

¿Qué es java.math.BigInteger y para qué se utiliza en Java?

| Última modificación: 7 de enero de 2025 | Tiempo de Lectura: 3 minutos

Me fue bastante mal la primera vez que intenté calcular un factorial de un número muy grande en Java usando int. Ahora me da risa, pero en ese momento todo fue un desastre, porque lo que obtuve fueron números negativos, errores y resultados completamente incoherentes. No fue sino hasta que descubrí la clase java.math.BigInteger que pude trabajar bien con números grandes en Java. Por eso quiero explicarte qué es y para qué la puedes usar, así no te pasará como a mí, que tuve que lidiar bastante cuando no la conocía.

java.math.BigInteger en Java qué es

¿Qué es java.math.BigInteger?

No sé si has visto esos camiones que son especiales para mover toneladas de carga. Pues java.math.BigInteger es como uno de esos camiones donde puedes mover números masivos. En este caso no podríamos usar tipos de datos como int o long para números inmensos, porque sería como tratar de mover esas toneladas de carga con un auto compacto.

Debes saber que, la clase java.math.BigInteger se diseñó para manejar números enteros que exceden los límites de los tipos primitivos. Además, es inmutable y proporciona métodos para realizar operaciones matemáticas avanzadas como suma, resta, multiplicación, división, cálculos modulares, manipulación de bits y más.

Algo que me gusta de esta clase es que se puede usar en muchos escenarios, como en criptografía, para hacer cálculos científicos o financieros o para representar números tan grandes como la memoria lo permita.

Características

  • Tamaño ilimitado: Aunque en teoría puedes trabajar con números infinitos, el tamaño real está limitado por la memoria disponible.
  • Inmutabilidad: Una vez creada, una instancia de BigInteger no puede ser modificada.
  • Compatibilidad con operaciones avanzadas: Admite operaciones como GCD (máximo común divisor), potencias y manipulación de bits.

Cómo usar java.math.BigInteger: Aprende con estos ejemplos

Crear instancias de BigInteger

Tienes que saber que hay varias formas de crear un objeto BigInteger. Aquí tienes algunos ejemplos:

import java.math.BigInteger;

public class EjemploBigInteger {
public static void main(String[] args) {
// Crear un BigInteger a partir de una cadena
BigInteger desdeTexto = new BigInteger("123456789123456789");

// Crear un BigInteger con un valor inicial de un entero largo
BigInteger desdeLong = BigInteger.valueOf(987654321);

System.out.println("Desde texto: " + desdeTexto);
System.out.println("Desde long: " + desdeLong);
}
}

Operaciones matemáticas básicas

Te expliqué al principio que, con java.math.BigInteger, puedes realizar operaciones como suma, resta y multiplicación sin preocuparte por desbordamientos.

Aquí te muestro cómo lograrlo:

import java.math.BigInteger;

public class Operaciones {
public static void main(String[] args) {
BigInteger num1 = new BigInteger("10000000000000000000");
BigInteger num2 = new BigInteger("5000000000000000000");

// Sumar
BigInteger suma = num1.add(num2);
System.out.println("Suma: " + suma);

// Restar
BigInteger resta = num1.subtract(num2);
System.out.println("Resta: " + resta);

// Multiplicar
BigInteger multiplicacion = num1.multiply(num2);
System.out.println("Multiplicación: " + multiplicacion);
}
}

Factorial de un número grande

En mi anécdota te conté que uno de los casos más comunes para java.math.BigInteger es calcular factoriales. Para que no te pase lo mismo que a mí, hazlo así:

import java.math.BigInteger;

public class Factorial {
public static void main(String[] args) {
int numero = 30;
BigInteger factorial = BigInteger.ONE;

for (int i = 2; i <= numero; i++) {
factorial = factorial.multiply(BigInteger.valueOf(i));
}

System.out.println("Factorial de " + numero + ": " + factorial);
}
}

Cálculos modulares y potencias

Si trabajas en criptografía o necesitas operaciones modulares, BigInteger tiene métodos útiles que perfectamente puedes aprovechar:

import java.math.BigInteger;

public class ModularYPotencias {
public static void main(String[] args) {
BigInteger base = new BigInteger("7");
BigInteger exponente = new BigInteger("3");
BigInteger modulo = new BigInteger("5");

// Potencia
BigInteger potencia = base.pow(exponente.intValue());
System.out.println("Potencia: " + potencia);

// Módulo
BigInteger resultadoModulo = potencia.mod(modulo);
System.out.println("Resultado modular: " + resultadoModulo);
}
}

Comparaciones entre números grandes

Ten en cuenta que, además de las operaciones matemáticas, puedes comparar números fácilmente. Mira cómo:

import java.math.BigInteger;

public class Comparaciones {
public static void main(String[] args) {
BigInteger num1 = new BigInteger("123456789");
BigInteger num2 = new BigInteger("987654321");

System.out.println("Máximo: " + num1.max(num2));
System.out.println("Mínimo: " + num1.min(num2));
}
}

Beneficios de java.math.BigInteger en proyectos reales

  • Aplicaciones financieras: Realiza cálculos precisos sin errores de redondeo.
  • Criptografía: Trabaja con claves y cifras de gran tamaño.
  • Simulaciones científicas: Calcula valores extremadamente grandes necesarios en física o estadística.
  • Optimización en cálculos matemáticos complejos: Facilita operaciones avanzadas como GCD o potencias modulares sin pérdida de precisión.
  • Manipulación de bits: Realiza operaciones bit a bit, como AND, OR y NOT, útiles en algoritmos de bajo nivel.
  • Sin límites de tamaño: Permite trabajar con números más grandes que long o int, ideal para simulaciones de datos masivos.

java.math.BigInteger es grandiosa para trabajar con números grandes en Java. Ya sea que estés calculando factoriales gigantes o realizando operaciones modulares complejas, esta clase te garantiza precisión y facilidad de uso.

Si quieres dominar herramientas como BigInteger y aprender a crear aplicaciones avanzadas, apúntate al Bootcamp de Java Full Stack en KeepCoding. Te enseñaremos a programar como un profesional y a abrirte camino en el sector IT. ¡Inscríbete ahora y transforma tu futuro!

Posts más leídos