Kernel Error
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

Compartelo:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • MySpace

Comentarios

5 Respuestas to “500!”
  1. /*
    * 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++
    //Es enorme Java 1.6seg a diferencia de c++ 0.116

    Usando Firefox 3.0.13 Firefox 3.0.13 en Windows Vista Windows Vista
  2. 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.

    Usando Internet Explorer 8.0; Internet Explorer 8.0; en Windows XP Windows XP
    • Kalith Kalith dice:

      razó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.

      Usando Firefox 3.6 Firefox 3.6 en Windows Vista Windows Vista
  3. Franklin Franklin dice:

    Kalith sera que te jodio el chamo? … con esa vaina tan sencilla =S…

    jjajajajaj

    Usando Firefox 3.5.8 Firefox 3.5.8 en Windows 7 Windows 7
    • b@cHo b@cHo dice:

      Seguramente 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.
      Y pone tantos datos de su vida que tube que censurar algunos, por mi y su bien asi que un gran WTF

      Usando Firefox 3.6 Firefox 3.6 en Windows 7 Windows 7

Comenta algo

Comparte tu opinión...
Ah si... también si quieres mostrar una imagen tuya puedes usar gravatar!





BBCode Sencillo soportado.  

    Edición Avanzada desactivada.

Kernel Error
97 intentos de ataques detenidos