Números grandes en Java


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 intdoublefloat.

Java nos ofrece las clases BigDecimalBigInteger 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

Posted in

3 responses to “Números grandes en Java”

  1. John Jairo Rios
    Posted agosto 19, 2010 at 9:38 pm | Permalink

    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.

    1. Posted agosto 21, 2010 at 5:13 pm | Permalink

      Que tal John!

      Es bueno saber que te sirvió la información, suerte con tus proyectos…

  2. kris
    Posted septiembre 3, 2010 at 3:02 am | Permalink

    hola! queria saber como puedo hacer un 1000^1000 y poder ver el resultado en java, espero me puedas ayudar ;) saludos!

Leave a Reply