
{filelink=5521}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.math.BigInteger;
public class FactorielUtilisateur
{
protected static ArrayList table = new ArrayList();
static
{
table.add(BigInteger.valueOf(1));
}
public static synchronized BigInteger factorial(int nombre)
{
if (nombre < 0)
throw new IllegalArgumentException("le nombre doit être superieur à 0.");
for (int size = table.size(); size <= nombre; size++) {
BigInteger dernierFact = (BigInteger) table.get(size - 1);
BigInteger factSuivant = dernierFact.multiply(BigInteger.valueOf(size));
table.add(factSuivant);
}
return (BigInteger) table.get(nombre);
}
public static void main(String[] args) throws IOException {
// Initialiser un BufferedReader pour lire l'entrée clavier.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// Boucle infinie
for (;;) {
System.out.print("Tapez un nombre>> ");
// Lire la valeur tapée par l'utilisateur
String line = in.readLine();
// Verifier si l'utilisateur veut quitter l'application
if ((line == null) || line.equals("terminer"))
{
System.out.println("Merci d'avoir utiliser le calculateur de Factoriel");
break;
}
try
{
// Verifier si l'utilisateur a taper un nombre
int x = Integer.parseInt(line);
System.out.println(x + "! = " + FactorielUtilisateur.factorial(x));
}
// Si l'entrée n'est pas un nombre, afficher une exception
catch (Exception e)
{
System.out.println("Nombre invalid");
}
}
}
}