some image

Codes and Tags

Calcular Factorial en JAVA utilizando BigInteger y recursión

Etiquetas: , Blog, Programación No comments

Hola, por recomendación de mi viejo amigo Phi (Hace mucho tiempo sobre como obtener elfactorial de un numero en Java con BigInteger) aqui esta el código utilizando recursión y utilizando la clase BigInteger para obtener un resultado mucho mas grande. El código anterior solo pertimia obtener el factorial de un numero menor a 20!..

//Importo las clases necesarias
import java.math.BigInteger;
import java.io.*;

/**
* FactorialBigInteger
* Obtiene el factural de un numero ingresado por teclado, utilizando la clase
* BigInteger para no limitar el resultado  a un factorial N de 20.
* @author [D-m-K]
* http://codesandtags.org
*/

public class FactorialBigInteger {
  public static void main(String[] args) throws IOException{
         //Pido el número
        System.out.println("\n\t O B T E N E R   F A C T O R I A L \n");
        int n = leerN("\t Ingresa el valor de N para obtener factorial : ");
        BigInteger factorial = obtenerFactorial(n);

        //Obtengo el factorial del número ingresado
        System.out.println("\n\t [R E S U L T A D O]\n");
        System.out.println("\t El factorial de " + n + " es : " + factorial);

  }

  /**
   * @param msg - Mensaje a mostrar para solicitar el valor de entrada
   * @return n - Valor ingresado de tipo entero
   * @throws java.io.IOException
   */
  public static int leerN (String msg) throws IOException{
      int n = 0;
      boolean error;
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

       do{
         error = false;
         try{
             System.out.print(msg);
             n = Integer.parseInt(br.readLine());
             if(n < 1){
                 System.out.println("\t ERROR : El numero no puede ser negativo\n");
                error = true;
             }
         }catch(NumberFormatException e){
             System.out.println("\t ERROR : El valor ingresado no es numerico\n");
             error = true;
         }
       }while(error);

       return n;
   }

  /**
   * @param n - numero a calcular
   * @return fac - Factorial del numero a calcular de tipo BigInteger
   */
   public static BigInteger obtenerFactorial(int n){
      if(n <= 1){
          return (new BigInteger("1"));
      }else{
   //Realizo la multiplicacion del numero n!
          BigInteger fac = new BigInteger(String.valueOf(n));
          return (fac.multiply(obtenerFactorial(n - 1)));
      }
  }
}

Ejemplo de la ejecución
O B T E N E R  F A C T O R I A L
Ingresa el valor de N para obtener factorial : 45

[R E S U L T A D O] El factorial de 45 es : 119622220865480194561963161495657715064383733760000000000

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment