Obtener el factorial de un número con 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).-
Conclusiones
Si te encontraste útil este articulo, por favor compártelo para que pueda llegar a más personas.
Que tengan feliz código