Fakultäten (Schleifen)
Programmieren Sie die Fakultätsfunktion mittels Schleife. Die Fakultät gibt an, auf wie viele Arten sich n Objekte auf n Plätze verteilen können. Zum Beispiel können sich zwei Personen auf zwei Arten auf zwei Stühle setzen. Sind jedoch drei Personen und drei Stühle gegeben, so sind es bereits sechs Möglichkeiten (3 * 2). Bei vier Personen und vier Stühlen erhalten wir 24 Möglichkeiten (4 * 3 * 2).
Testen Sie Ihr Programm auch mit großen Eingabewerten.
0 Kommentare
6 Lösung(en)
n = int(raw_input("N: "))
i =1
fact =1
while (i<=n):
fact = fact*i
i = i+1
print'fact('+str(n)+') = '+str(fact)
package ch.programmieraufgaben.iteration;
import java.util.Scanner;
public class Fakultaet {
public static void main(String[] args) {
new Fakultaet().top();
}
void top() {
int n = einlesenInt ("n");
long fact = 1;
while(n > 0) {
fact = n * fact;
n = n - 1;
}
System.out.println("Fakultaet = " + fact);
}
// generelle Hilfsfunktionen
Scanner sc = new Scanner(System.in);
int einlesenInt(String wert) {
meldung(wert);
return sc.nextInt();
}
void meldung(String wert) {
System.out.println("Bitte " + wert + " eingeben:" );
}
} // end of class Fakultaet
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
# Fakultät
def fak(n):
summe = 1
i = 1
while i < n+1:
summe = summe * i
i = i + 1
return summe
# n!
print( fak(20) )
Lösung von: Alex Groeg (Freies Lernen)
Math.factorial = function(num) {
let res = 1, i;
for (i = 1; i <= num; i++) res *= i;
return res;
}
// ausgaben
console.log(Math.factorial(10)); // 3628800
console.log(Math.factorial(100)); // 9.33262154439441e+157
console.log(Math.factorial(1000)); // Infinity ;)
// lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
using System.Numerics;
// 1. iterativ
static BigInteger FacIter(int n) {
BigInteger result = 1;
for (int i = 1; i <= n; i++)
result *= i;
return result;
}
new List<int> { 10, 50, 100, 1_000, 5_000, 10_000, 50_000, 100_000 }.ForEach(i => Console.WriteLine($"{i} -> {FacIter(i):e2}"));
// 2. rekursiv (ab 5.000 stack overflow)
static BigInteger FacRec(BigInteger n) => (n < 1) ? 1 : FacRec(n - 1) * n;
new List<int> { 10, 50, 100, 1_000, 5_000 }.ForEach(i => Console.WriteLine($"{i} -> {FacIter(i):e2}"));
/*
10 -> 3,63e+006
50 -> 3,04e+064
100 -> 9,33e+157
1000 -> 4,02e+2567
5000 -> 4,23e+16325
10000 -> 2,85e+35659
50000 -> 3,35e+213236
100000 -> 2,82e+456573
*/
Lösung von: Jens Kelm (@JKooP)
// C++ 14 | VS-2022
#include <iostream>
#include <functional>
#include <vector>
template<typename _Ty>
const _Ty fac_iter(_Ty n) {
_Ty result{ 1 };
for (_Ty i{ 1 }; i <= n; ++i) result *= i;
return result;
}
template<typename _Ty>
const _Ty fac_rec(_Ty n) {
return (n < 1) ? 1 : fac_rec(n - 1) * n;
}
int main() {
std::vector<long double>v{ 10, 50, 100, 1'000 };
for (const auto& e : v) {
std::cout << e << " iterativ -> " << fac_iter(e) << "\n";
std::cout << e << " rekursiv -> " << fac_rec(e) << "\n\n";
}
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
- 20! ? 2.43 x 1018
- 30! ? 2.65 x 1032
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.5 |
Schwierigkeit: | Leicht |
Webcode: | neh4-hqjt |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |