Obtener el factorial de un número con Java


Numeros primos en java

[MicroPost] En este micro articulo aprenderemos como obtener el factorial de un número dado en Java, puedes encontrar el código funcional al final en nuestro repositorio de Github.

Que es el factorial

El factorial de un entero positivo n, el factorial de n o n factorial se define en principio como el producto de todos los números enteros positivos desde 1 (es decir, los números naturales) hasta n (definición wikipedia).

Algoritmo para factorial

El siguiente método nos permite obtener el factorial de un número dado.-

1
2
3
4
5
6
7
8
9
10
11
12
public static long factorial(int n)
{
    long fac = 1;

    if(n >= 2){
        for(int i = 1; i <= n; i++){
            fac *= i;
        }
    }

    return fac;
}

El funcionamiento del algoritmo es bastante simple, en la linea 3 declaramos la variable “fac” en la cual almacenaremos el producto de los números naturales hasta n.-

1
2
// Declaramos fac para lamacenar el producto del factorial
long fac = 1;

En la linea 5 verificamos que el número dado sea mayor o igual a 2, de esta forma si el número dado es 1, el resultado sera 1.-

1
2
3
4
// Verificamos que n sea myor o igual a 2
if(n >= 2){
    ...
}

En cada iteración multiplicamos el valor almacenado en fac con el correspondiente al valor de i, es necesario indicar que en el ciclo for i se inicializa en 1, dado que si se inicializa en 0, el resultados siempre sera 0.-

1
2
3
4
// Obtenemos el factorial
for(int i = 1; i <= n; i++){
    fac *= i;
}

Desbordamiento de pila

El algoritmo anterior tiene un pequeña limitación, la cual es el valor máximo que nos devuelve la función dada por el valor máximo del tipo long (9,223,372,036,854,775,807), para solventar este problema se puede utilizar la clase BigInteger.-

1
import java.math.BigInteger;

Modificando el algoritmo anterior obtendríamos el siguiente método.-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static BigInteger bigFactorial(int n)
{
    // Empezamos la base del factorial
    BigInteger fac = new BigInteger("1");

    // Obtenemos el factorial solo si el numero es mayor o igual a 2
    if(n >= 2){
        // Proceso para obtener el factorial
        for(int i = 1; i <= n; i++){
            // Multiplicamos los numeros
            fac = fac.multiply(new BigInteger(i + ""));
        }
    }

    return fac;
}

El funcionamiento es el mismo, solo con la diferencia de los métodos de la clase BigInteger.

Casos de uso

Para verificar su funcionamiento, creamos un método para ingresar el dato.-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static int enterData()
{
    Scanner scan = new Scanner(System.in);
    int n;

    try{
        n = scan.nextInt();

        return n;
    } catch(Exception e) {
        System.out.println("Ingrese un numero");
        return enterData();
    }
}

Y en el método main realizamos el proceso.-

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args)
{
    // Obtenemos el numero
    System.out.print("Ingrese un numero: ");
    int n = enterData();

    // Obtenemos el factorial
    System.out.println("Factorial de "+n+": "+bigFactorial(n));
    // System.out.println("Factorial de "+n+": "+factorial(n));
}

Ahora si ejecutamos el programa y probamos con el conjunto de datos { 5, 100 } obtendremos el siguiente resultado.-

1
2
3
4
Ingrese un numero: 5
Factorial de 5: 120
Ingrese un numero: 100
Factorial de 100: 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Código de ejemplo

Puedes encontrar el código completo en el siguiente enlace (repositorio de github).-

Factorial.java

Conclusiones

Si te encontraste útil este articulo, por favor compártelo para que pueda llegar a más personas.

Que tengan feliz código


Te fue de utilidad el articulo, ayudanos a compartir para que a más personas les resulte util!

Te interesa el tema, recibe los nuevos articulos directamente en tu email.-