bigIntegerFakultaet.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import javax.swing.JOptionPane;
  2. import java.util.Arrays;
  3. import flanagan.io.Db;
  4. import java.math.BigInteger;
  5. /**
  6. * Das Program liest eine ganze Zahl N (0 <= N <= 20) und
  7. * berechnet den Wert von N! = 1 * 2 * ... * (N - 1) * N, wobei
  8. * 0! = 1 (nach Definition)
  9. *
  10. * @author Victor Yakhontov
  11. * @version Version vom 29.11.12
  12. */
  13. public class bigIntegerFakultaet
  14. {
  15. public static void main(String [] args)
  16. {
  17. int N = 0; // Deklaration von N - Variablen vom je Datentyp int
  18. /* Bedeutung:
  19. * N = die gesuchte Fakultaet (0 <= N <= 20)
  20. * n = laufende Fakultaet-Zahl
  21. * resn = leufende Fakultaet: resn = (n - 1)!, n = 0, 1, 2, ... N
  22. * res = Resultat: res = n! = n*(n - 1)!, n = 0, 1, 2, ... N
  23. * = n* resn
  24. */
  25. // Nun wird es gecheckt, ob die Anzahl der Input-Parameter >= 2
  26. boolean valid = false;
  27. try {
  28. N = Db.readInt("Gib die Grundzahl als eine Integer-Zahl ein und " +
  29. "bestätige mit ENTER ");
  30. } catch (NumberFormatException e) {
  31. System.exit(1);
  32. }
  33. // Es wird nun gecheckt, ob der Input-Parameter die folgenden
  34. // Bedingungen erfuellen: N >= 0 und N <= 20
  35. if ( N < 0 )
  36. {
  37. Db.show(
  38. "Falsche Eingabe: der Input-Parameter N < 0 \n"+
  39. "Probieren Sie nochmals! Das Programm ist sofort beendet!");
  40. System.exit(1);
  41. }
  42. // An dieser Stelle gilt: 0 <= N <= 20
  43. Db.show(
  44. "Die Eingabe ist OK! Sie möchten also " + N + "! berechnen!");
  45. // Spezialfall: 0! = 1
  46. if (N == 0) {
  47. System.out.println("Fakultaet " + N + "! = " + 1);
  48. System.exit( 0 );
  49. }
  50. System.out.format("\n%s \t n! \n-------------------------------------", " n", N);
  51. /* Initialisierung der Variablen res und resn
  52. * Diese sind erforderlich fuer die Schleife ueber n = 1, 2, ... N
  53. */
  54. // Schleife ueber n = 1, 2, 3, ... N
  55. // use big integer
  56. BigInteger bigN = BigInteger.valueOf(N);
  57. bigN.add(BigInteger.ONE);
  58. bigN = bigN.add(BigInteger.ONE);
  59. System.out.println(bigN);
  60. BigInteger res = BigInteger.valueOf(1);
  61. BigInteger resn = BigInteger.valueOf(1);
  62. for (BigInteger n = BigInteger.valueOf(1); n.compareTo(bigN) < 0; n = n.add(BigInteger.ONE)) // FOR-Schleife ueber die Variable n = 1,2, ... , N
  63. {
  64. res = n.multiply(resn); // current result
  65. resn = res; // new overall result
  66. System.out.format("\n %2d \t %-20d", n, res);
  67. }
  68. System.out.format("\n-------------------------------------");
  69. JOptionPane.showMessageDialog (null,
  70. N + "! = " + res,
  71. "Lösung", JOptionPane.INFORMATION_MESSAGE);
  72. }
  73. }