//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]
*
*/
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
Salu2
Hi
ResponderEliminarMuy buen algoritmo, bastante interesante, mi pregunta, es cuando yo trato de hacer algo como 145^125 (^ = exponente), pero uso BigDecimal, me arroja infinito, existe una manera en la que pueda hacer que me muestre en pantalla el resultado? osea el número completo.
gracias de antemano
Bytes
Hola, bueno para el caso de BigDecimal o BigInteger puedes utilizar el metodo pow(), el cual obtiene la potencia del numero que quieres.
ResponderEliminarEjemplo :
//Declaro un BigDecimal con 145
BigDecimal b1 = BigDecimal.valueOf(145);
//Obtengo la potencia => 145^125 (^ = exponente) y muestro el resultado
System.out.println("Resultado : " + (b1.pow(125)));
Espero que te funcione.
Salu2 ;)
:3
Eliminarola
ResponderEliminarmetodo para usar % en bigteger
ResponderEliminar