bigIntegerFakultaet.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. else if ( N >= 21 )
  43. {
  44. Db.show(
  45. "Falsche Eingabe: der Input-Parameter N > 20 \n"+
  46. "Probieren Sie nochmals! Das Programm ist sofort beendet!");
  47. System.exit(1);
  48. }
  49. // An dieser Stelle gilt: 0 <= N <= 20
  50. Db.show(
  51. "Die Eingabe ist OK! Sie möchten also " + N + "! berechnen!");
  52. // Spezialfall: 0! = 1
  53. if (N == 0) {
  54. System.out.println("Fakultaet " + N + "! = " + 1);
  55. System.exit( 0 );
  56. }
  57. System.out.format("\n%s \t n! \n-------------------------------------", " n", N);
  58. //int res = 1, resn = 1; // Deklaration von 2 Variablen vom je Datentyp int
  59. /* Initialisierung der Variablen res und resn
  60. * Diese sind erforderlich fuer die Schleife ueber n = 1, 2, ... N
  61. */
  62. // Schleife ueber n = 1, 2, 3, ... N
  63. // use big integer
  64. BigInteger bigN = BigInteger.valueOf(N);
  65. bigN.add(BigInteger.ONE);
  66. bigN = bigN.add(BigInteger.ONE);
  67. System.out.println(bigN);
  68. BigInteger res = BigInteger.valueOf(1);
  69. BigInteger resn = BigInteger.valueOf(1);
  70. for (BigInteger n = BigInteger.valueOf(1); n.compareTo(bigN) < 0; n = n.add(BigInteger.ONE)) // FOR-Schleife ueber die Variable n = 1,2, ... , N
  71. {
  72. res = n.multiply(bigN); // current result
  73. resn = res; // new overall result
  74. System.out.format("\n %2d \t %-20d", n, res);
  75. //System.out.println(n);
  76. //res = n*resn; // n! = n*(n - 1)! = laufender n-Wert mal "resn"
  77. //resn = res; // neuer resn = n!
  78. //System.out.format("\n %2d \t %-20d", n, res);
  79. }
  80. System.out.format("\n-------------------------------------");
  81. JOptionPane.showMessageDialog (null,
  82. N + "! = " + res,
  83. "Lösung", JOptionPane.INFORMATION_MESSAGE);
  84. }
  85. }