123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import javax.swing.JOptionPane;
- import java.util.Arrays;
- import flanagan.io.Db;
- import java.math.BigInteger;
- /**
- * Das Program liest eine ganze Zahl N (0 <= N <= 20) und
- * berechnet den Wert von N! = 1 * 2 * ... * (N - 1) * N, wobei
- * 0! = 1 (nach Definition)
- *
- * @author Victor Yakhontov
- * @version Version vom 29.11.12
- */
- public class bigIntegerFakultaet
- {
- public static void main(String [] args)
- {
- int N = 0; // Deklaration von N - Variablen vom je Datentyp int
- /* Bedeutung:
- * N = die gesuchte Fakultaet (0 <= N <= 20)
- * n = laufende Fakultaet-Zahl
- * resn = leufende Fakultaet: resn = (n - 1)!, n = 0, 1, 2, ... N
- * res = Resultat: res = n! = n*(n - 1)!, n = 0, 1, 2, ... N
- * = n* resn
- */
- // Nun wird es gecheckt, ob die Anzahl der Input-Parameter >= 2
- boolean valid = false;
- try {
- N = Db.readInt("Gib die Grundzahl als eine Integer-Zahl ein und " +
- "bestätige mit ENTER ");
- } catch (NumberFormatException e) {
- System.exit(1);
- }
- // Es wird nun gecheckt, ob der Input-Parameter die folgenden
- // Bedingungen erfuellen: N >= 0 und N <= 20
- if ( N < 0 )
- {
- Db.show(
- "Falsche Eingabe: der Input-Parameter N < 0 \n"+
- "Probieren Sie nochmals! Das Programm ist sofort beendet!");
- System.exit(1);
- }
- else if ( N >= 21 )
- {
- Db.show(
- "Falsche Eingabe: der Input-Parameter N > 20 \n"+
- "Probieren Sie nochmals! Das Programm ist sofort beendet!");
- System.exit(1);
- }
- // An dieser Stelle gilt: 0 <= N <= 20
- Db.show(
- "Die Eingabe ist OK! Sie möchten also " + N + "! berechnen!");
- // Spezialfall: 0! = 1
- if (N == 0) {
- System.out.println("Fakultaet " + N + "! = " + 1);
- System.exit( 0 );
- }
- System.out.format("\n%s \t n! \n-------------------------------------", " n", N);
- //int res = 1, resn = 1; // Deklaration von 2 Variablen vom je Datentyp int
- /* Initialisierung der Variablen res und resn
- * Diese sind erforderlich fuer die Schleife ueber n = 1, 2, ... N
- */
- // Schleife ueber n = 1, 2, 3, ... N
-
- // use big integer
- BigInteger bigN = BigInteger.valueOf(N);
- bigN.add(BigInteger.ONE);
- bigN = bigN.add(BigInteger.ONE);
- System.out.println(bigN);
- BigInteger res = BigInteger.valueOf(1);
- BigInteger resn = BigInteger.valueOf(1);
- for (BigInteger n = BigInteger.valueOf(1); n.compareTo(bigN) < 0; n = n.add(BigInteger.ONE)) // FOR-Schleife ueber die Variable n = 1,2, ... , N
- {
- res = n.multiply(bigN); // current result
- resn = res; // new overall result
- System.out.format("\n %2d \t %-20d", n, res);
- //System.out.println(n);
- //res = n*resn; // n! = n*(n - 1)! = laufender n-Wert mal "resn"
- //resn = res; // neuer resn = n!
- //System.out.format("\n %2d \t %-20d", n, res);
- }
- System.out.format("\n-------------------------------------");
- JOptionPane.showMessageDialog (null,
- N + "! = " + res,
- "Lösung", JOptionPane.INFORMATION_MESSAGE);
- }
- }
|