jun 9, 2009

Enviado por en Algoritmos, Programacion

500!

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

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

    1. avatar
      Camilo Romero dice:

      /*
      * 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

    Menciones/Notificaciones

    1. Click! - need eliminating the need of having a... permanent writer who has to be paid whether there is work or not. this ...