Algoritmos, Programacion
500!
9 de Junio del 2009 por Kalith · 5 Comentarios
Buenas.
Hace unos días en un post sobre permutaciones dabamos una idea de lo que era el factorial de un numero, pues aprovecho la situación y ya que por recomendación de Camilo, un compañero, me dijo que mirase el problema “500!” de la uva, (para los que les interesa es el 623, http://online-judge.uva.es/p/v6/623.html ) en realidad no presenta mayor complicación es simplemente calcular factoriales, el problema realmente esta en que los resultados van a ser números que no caben en ningún tipo de dato, a menos nativos no, ya en post anteriores tanto Llyn como yo, hablamos de como sumar numeros grandes en c++, pero como java ya me da unas soluciones tanto BigNumbers como BigInteger pues me sirvió para recordar un poco de java que llevo un buen tiempo sin tocarlo, sin mas larga al asunto dejo el codigo del problema
//Kalith [at] kernelerror [dot] net
import java.io.*;
import java.math.*;
public class p500
{
public static void main(String args[]) throws IOException
{
String word;
BigInteger bi = BigInteger.valueOf(1);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((word = br.readLine()) != null)
{
System.out.println(word + "!");
for(int i = Integer.parseInt(word); i >= 1; --i)
bi = bi.multiply(BigInteger.valueOf(i));
System.out.println(bi);
bi = BigInteger.valueOf(1);
}
}
}
saludos
- Posts Relacionados
- Clase BigInteger en java Buenas. A diferencia de lo que muchos creían no habia...
- Balanceo de expresiones usando pilas en c++ Buenas El balanceo de expresiones (no se con que otro...
- Intento de grep en c++ Buenas. Necesitaba este pequeño programita para algo que estoy haciendo,...
- Balanceo de expresiones II Buenas. Ayer en este post hablabamos de balanceo de expresiones...
- C#: Clase para conversion de sistemas numericos Buenas.. Un pequeño code de una clase para convertir sistemas...









/*
* Hecho por kalith
* Modificado 06/08/2009 por
* Camilo Ernesto Romero Cuevas
* Barquisimeto – Venezuela
* ACM – UCLA
*/
import java.io.*;
import java.math.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
String cad;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BigInteger bi = BigInteger.valueOf(1);
while ((cad = in.readLine()) != null) {
System.out.println(cad + “!”);
for(int i = Integer.parseInt(cad); i >= 1; –i)
bi = bi.multiply(BigInteger.valueOf(i));
System.out.println(bi);
bi = BigInteger.valueOf(1);
}
}
}
//Este es aceptado en UVa pero el tiempo de ejecucion con respecto a c++
Usando//Es enorme Java 1.6seg a diferencia de c++ 0.116
Hola, soy Ignacio [censurado], estudiante de Informática de [censurado]
Estado [censurado], el factorial de 500 o más lo pude hacer de la siguiente manera:
Descargué Python Portable para Windows: para ejecutarlo desde mi pendrive y asi no tener que instalar nada, lo ejecuté y una vez dentro de su interprete, coloqué:
import math
print(math.factorial(50000))
Eso es todo. El único límite es la capacidad de memoria de mi equipo.
Usandorazón evidenetemente que tiene.. pero el juez virtual de la universidad de valladolid solo permite lenguajes c, c++ y java.. hay diversas soluciones en diversos lenguajes y pues ahi usas el factrorial ya hecho (que no digo que este mal) pero pues la idea de este post es a parte de aprender a calcular el factorial, es ver como usar la clase BigInt de java.
UsandoKalith sera que te jodio el chamo? … con esa vaina tan sencilla =S…
jjajajajaj
UsandoSeguramente es solo que no sabe en que consiste UVA sino imaginate resolver retos de la UVA con cualquier lenguaje creo que ya no serian retos… aparte de que resta creatividad.
UsandoY pone tantos datos de su vida que tube que censurar algunos, por mi y su bien asi que un gran WTF