El factorial de un numero n es simplemente la multiplicación de todos los números naturales de 1 a n.
Pero ahora notamos que esta cantidad crece demasiado si queremos calcular el factorial de un numero grande, por ejemplo el factorial de 100 es:
Tiene exactamente 158 dígitos, en ningún lenguaje de programación conocido existe una tipo de dato primitivo que soporte 158 dígitos, y que pasaría si quisiéramos calcular 101! tendríamos que multiplicar esta cantidad por 101, te imaginas? Pero bueno ahora como lo hacemos? pues utilizaremos una herramienta de el lenguajes de programación Java llamada BigInteger (disponible en .NET desde el Framework 4, C#, Visual Basic y disponible en varios otros lenguajes actualmente), que hace precisamente manejar números enteros grandes, es si es una clase que también tiene métodos para sumar números grandes y multiplicar números grandes y mucho mas. Se encuentra en el paquete java.math.BigInteger.
Veamos entonces el código de la función factorial en Java.
public static BigInteger factorial(int n) {
BigInteger f = new BigInteger("1");
for (int i = 1; i <= n; i++) {
f = f.multiply(new BigInteger(i + ""));
}
return f;
}
En esta función le mandamos de parámetro el numero del cual queremos calcular el factorial, luego creamos un numero grande f que inicialmente empezara en 1 para luego representar el factorial (el constructor de BigInteger solo acepta String), hacemos lo común en las siguientes líneas multiplicando entre BigInteger’s por eso convertimos al subíndice i en un objeto BigInteger y como el constructor solo acepta cadenas, entonces convertimos a String de la forma mas fácil, concatenando un String vacío, finalmente retornamos un numero entero grande, que luego desde donde lo llamemos lo podemos convertir en String con el método toString().
Descargar Ejemplo (.java)
Antes de que existiera esta herramienta para el manejo de numeros grandes se hacia uso de estructura de datos, como por ejemplo arrays o listas, donde en cada posición existía un digito del numero, en cuestión es eso lo que hace esta clase.
El BigInteger es una de las mas grandes ventajas que tiene Java... pero como hacerlo en C++ o algun otro lenguaje que no desponga del manejo de numeros tan grandes??
ResponderEliminarPues se usa un metodo basico aprendido en colegio, multiplicacion paso a paso con cadenas(pues internamente el BigInteger maneja strings)
como tu dices la solucion para trabajar con numeros grades puede ser trabajar con string, pero podria ser un poco mejor trabajar con vectores, puede parecer moroso al principio pero es interesante ya q un vector puede almacenar casi 99999999 datos...Q almacenes cada digito en una posicion del vector y luego llames a un metodo para multiplicar vectores soluciona el problema...Espero q les haya sido de ayuda
ResponderEliminarel principio para manejar números grandes es el cambio de base.
ResponderEliminarPor ejemplo, se cambia al número gigante de base 10 a base 10^9, y cada dígito de base 10^9 se puede almacenar en un vector de long.
El número N estaría siendo expresado en:
N = V[0]*1 + V[1]*10^9 + V[2]*10^18 + ...
donde 0,1,2,... son las posiciones de un vector V.
Al hacer este cambio de base, se facilitan las operaciones básicas como suma, resta, multiplicación, división, etc.
Solo se manejaría como cadena a la hora de mostrar y leer datos. (por eso Java crea un BigInteger a partir de un String)
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminarpara anonimo que dice
Eliminar"esa mierda la sabe hacer mi hermana de 3 años.......dejense de abuso........cualquiera con dos dedos de frente implementa ese algoritmo mierdero......
Pongan algo que valga la pena.......algo que me saque el aire....".
primero que todo respeta si tu lo sabes pues bueno felicidades por ti pero deja que otra gente se beneficie de esa información después de que la información sea correcta y verídica no hace ningún daño y segundo si te parece tan facil este tema te propongo que realices el algoritmo siguiente
sin utilizar operadores logicos ni ciclos ni vectores. SOLO operaciones matematicas decir si un año es bisiesto o no
y obiamente sin almanaques es decir te deves valer de una formula matematica para realizar el algoritmo
si no le entiendes empezaste mal.
Este comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por un administrador del blog.
ResponderEliminarEste comentario ha sido eliminado por un administrador del blog.
EliminarTe pido compañero que madures un poco y pongas nombre y apellido en tus comentarios, siempre la cobardía esta en este mundo.
ResponderEliminarMe salvaste la vida, y no pesques comentarios estúpidos... solo sigue ayudando a los que no saben y quieren y tienen ganas de aprender
ResponderEliminarsaludos¡¡¡
this is a excellent refenrece, thanks for you help.
ResponderEliminarKeep programing!!!!!
Osorio