Numeros muy grandes con BigInteger Java

Aquí os dejo un ejemplo de cómo realizar el cálculo del factorial de un número muy muy grande utilizando la clase de la API de Java BigInteger.

BigInteger en Java

Esta clase permite realizar cálculos sencillos con números de precisión arbitraria, esta clase proporciona métodos para realizar todas las operaciones que podemos realizar con números enteros primitivos de Java como sumar, multiplicar, dividir, etcétera.
//Se importa la clase BigInteger del paquete math
import java.math.BigInteger;

public class Main {

    public static void main(String[] args) {
        //Se muestra el resultado del factorial de 500 algo
        //imposible de hacer con los tipos primitivos de java
        System.out.println(factorial(new BigInteger("500")));
    }
 
    //Funcion recursiva para el calculo del factorial
    public static BigInteger factorial(BigInteger n) {
        //Si el parametro n es 1, se retorna 1 ya que el 
        //factorial de 1 es 1 por definicion
        if(n.equals(BigInteger.ONE)) {
            return BigInteger.ONE;
        }
        //Si el parametro n no es 1, se multiplica su valor por 
        //el factorial de n - 1
        return n.multiply(factorial(n.subtract(BigInteger.ONE)));
    }
}

Comentarios

  1. Hola tengo una consulta estoy recien aprendiendo a programar en java, y sobretodo en la programacion orientada a objetos, tengo un ejercicio que en realidad no se muy bien como resolverlo se parece mucho a este. la idea es calcular el factorial de un numero muy grande el problema esat resuelto en version estructurada pero no se como pasarlo a la POO espero puedas contactarme para ayudarme!! saludos

    ResponderEliminar
    Respuestas
    1. Realmente es un problema bastante pequeño para utilizar POO, en Java es muy importante la reutilización de código, y para ello lo primero es ver si lo que quieres hacer está implementado ya, y como es así, realmente sería una perdida de tiempo hacer una clase para manejar números muy grandes por que ya está BigInteger construida y la API (por si lo que querías hacer es una clase para controlar los números muy grandes).

      Así que no se muy bien que quieres hacer, ya que en este ejemplo, se instancia un objeto de la clase BigInteger, ya se está usando POO y la resolución del factorial es solamente una función, hacer una clase, instanciarla y llamar a un solo método de esta clase sería alargar el código innecesariamente.

      Saludos.

      Eliminar
    2. Efectivamente estando en Java la clase BigInteger te simplifica la vida, pero si te piden crear clases en el ejercicio, Y RECIÉN ESTÁS APRENDIENDO, diseña tú mismo cómo sumar, multiplicar usando arreglos), no es ninguna pérdida de tiempo y además que no todos los lenguajes tienen esta clase.

      Eliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Autocompletado de codigo en Sublime Text

Compilar y ejecutar JAVA desde Notepad++

Compilar y ejecutar JAVA desde Sublime Text