Tal vez sea necesario utilizar cierto grado de precisión en las operaciones matemáticas o trabajar con números mayores de los que nos permiten los tipos de datos primitivo como int, double o float.
Java nos ofrece las clases BigDecimal y BigInteger que se encuentran en el paquete java.math.
Al igual que los tipos de datos primitivos, los números grandes también deben inicializarse.
BigInteger numeroGrande = BigInteger.ZERO;
El primer método que debemos conocer es valueOf ya que sirve para transformar un número ordinario en un número grande.
int numeroOrdinario = 10; numeroGrande = BigInteger.valueOf(numeroOrdinario);
Para realizar las operaciones con números grandes no se pueden emplear los operadores de suma (+), resta (-), multiplicación (*) o división (/); para esto debemos utilizar los métodos add, subtract, multiply y divide respectivamente.
BigInteger valor1 = BigInteger.valueOf(3000);
BigInteger valor2 = BigInteger.valueOf(670);
System.out.println("Suma: " + valor1.add(valor2));
System.out.println("Resta: " + valor1.subtract(valor2));
System.out.println("Multiplicación: " + valor1.multiply(valor2));
System.out.println("División: " + valor1.divide(valor2));Suma: 3670 Resta: 2330 Multiplicación: 2010000 División: 4
Ejemplo Factorial
Veamos un ejemplo para determinar el factorial con números comunes y con números grandes. El algoritmo lo vamos a expresar como:

Ejemplo con números comunes:
package org.luisalberto.blog.numerosgrandes;
public class Factorial {
public static void main(String[] args) {
int numero = 19;
int resultado = 1;
int i = 1;
do {
resultado *= i;
i++;
}while(i <= numero);
System.out.println("19! = " + resultado);
}
}$ javac -d . Factorial.java $ java org.luisalberto.blog.numerosgrandes.Factorial 19! = 109641728
Es evidente que el resultado es incorrecto, el resultado real es: 121645100408832000.
Ejemplo con números grandes:
package org.luisalberto.blog.numerosgrandes;
import java.math.BigDecimal;
public class BigFactorial {
public static void main(String[] args) {
BigDecimal numero = BigDecimal.valueOf(19);
BigDecimal resultado = BigDecimal.valueOf(1);
int i = 1;
do {
resultado = resultado.multiply(BigDecimal.valueOf(i));
i++;
}while(i <= numero.intValue());
System.out.println("19! = " + resultado);
}
}$ javac -d . BigFactorial.java $ java org.luisalberto.blog.numerosgrandes.BigFactorial 19! = 121645100408832000
3 responses to “Números grandes en Java”
Que gran tutorial, la verdad es que me ha tocado muchisimo trabajar con numeros grandes y espero que este sea la solución a varios problemas que no he podido solucionar de una forma correcta.
Gracias viejo ..
Desde Cartagena, D, T y C. – Colombia.
Que tal John!
Es bueno saber que te sirvió la información, suerte con tus proyectos…
hola! queria saber como puedo hacer un 1000^1000 y poder ver el resultado en java, espero me puedas ayudar ;) saludos!