Enviado por Kalith 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
- 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ómo iterar en sentido contrario? Respuesta: reverse_iterator Lo puedes conseguir en la librería STL, bajo...
- Enviar emails con Visual C++ .NET Despues de tiempo sin escribir (ya se me acabaron las...
Menciones/Notificaciones
- Click! - need eliminating the need of having a... permanent writer who has to be paid whether there is work or not. this ...



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