Sonntag, 13. Oktober 2013

Fakultät berechnen

In C# gibt es, überraschenderweise wie ich finde, keine eingebaute Funktion, um die Fakultät einer Zahl zu berechnen. Diese wird geschrieben als n! und berechnet sich zu n * (n - 1) * ... * 2 * 1. Zum Beispiel ist 5! = 5 * 4 * 3 * 2 * 1 = 120.
Obwohl die Implementierung in C# nicht schwer ist, möchte ich heute doch eine Funktion posten, welche die Fakultät einer Zahl berechnet, und welche dann schnell per Copy & Paste in die eigene Anwendung eingebunden werden kann. Ich hoffe, dem einen oder anderen damit ein paar Sekunden oder Minuten zu ersparen.
Die Funktion Factorial() arbeitet iterativ, in jedem Schritt multipliziert sie das aktuelle Ergebnis mit der Zählvariable. Als Datentyp habe ich unsigned long gewählt, um den größtmöglichen Wertebereich für positive Ganzzahlen zu erhalten.

        public ulong Factorial(ulong n)
        {
            ulong Result = 1;
            for (ulong i = 1; i <= n; i++)
            {
                Result *= i;
            }
            return Result;
        }

Kommentare:

  1. Wie könnte man die Fakultät berechnen lassen wenn man zwei Textboxen erstellt aus diesen die Zahlenwert verwendet werden sollen. Über einen String in ulong ist dies nicht möglich.

    Danke im Voraus für die Antwort.

    AntwortenLöschen
    Antworten
    1. Hallo,
      leider verstehe ich deine Frage nicht ganz. Wofür brauchst du 2 Textboxen?
      Aber um den Inhalt der Textbox in einen ulong umzuwandeln und die Fakultät auszurechnen, kannst du folgenden Befehl benutzen:
      ulong Result = Factorial(Convert.ToUInt64(textBox1.Text));

      Löschen
    2. Hallo,

      der Befehl funktioniert nicht, es tritt ein Fehler auf und dort steht es kann nicht zwischen Methode und Eigenschaft unterschieden werden.

      Löschen
    3. Wenn deine Textbox so heißt, müsste es gehen.

      Löschen
    4. und wie kann ich das ergebnis der Fakultät anzeigen

      Löschen
    5. Ach dafür die 2 Textboxen:
      textBox2.Text = Factorial(5).ToString();

      Löschen
  2. Ich habe jetzt das angewendet aber jetz kommt dieser Fehler:
    System.StackOverflowException wurde nicht behandelt.
    Die Eingabezeichenfolge hat das falsche Format.
    bei: ulong Result = Factorial(Convert.ToUInt64(textBox1.Text));
    was kann da jetzt der Fehler sein ?

    AntwortenLöschen