// für llong_max
lange lange Fakultät (int n) {
if (n <0) {
fprintf (Stderr, "Fehler:Faktorial ist nicht für negative Zahlen definiert. \ n");
Ausgang (1); // mit einem Fehlercode beenden
}
if (n ==0) {
Rückkehr 1;
}
langes Ergebnis =1;
für (int i =1; i <=n; i ++) {
if (llong_max /result
fprintf (Stderr, "Fehler:Faktor überschreitet den maximal langen Wert. \ n");
Ausgang (1);
}
Ergebnis *=i;
}
Rückgabeergebnis;
}
int main () {
int num;
printf ("Geben Sie eine nicht negative Ganzzahl ein:");
if (scanf ("%d", &num)! =1) {
fprintf (Stderr, "Fehler:Ungültige Eingabe. \ n");
Rückkehr 1; // mit einem Fehlercode beenden
}
lange lange Tatsache =faktorial (num);
printf ("faktorial von %d =%lld \ n", num, fact);
Rückkehr 0;
}
`` `
zum Kompilieren und Ausführen dieses Codes:
1. Speichern: Speichern Sie den Code als `.c` -Datei (z. B.` factorial.c`).
2. kompilieren: Öffnen Sie ein Terminal und verwenden Sie einen C -Compiler (wie GCC), um den Code zu kompilieren:
`` `bash
GCC Factorial.c -o Fakultät
`` `
3. Run: Führen Sie das kompilierte Programm aus:
`` `bash
./Fakultät
`` `
Das Programm fordert Sie auf, eine Nummer einzugeben.
Verbesserungen und Erklärungen:
* Fehlerbehandlung: Der Code enthält Schecks für:
* Negative Eingabe: Es behandelt negative Eingaben ausdrücklich, was nicht für Faktorien definiert ist.
* Überlauf: Es verhindert potenziellen Überlauf, indem es prüft, ob die nächste Multiplikation den maximalen Wert überschreiten würde, den eine "lange Integer" (`llong_max`) halten kann. Die Verwendung von `long lang ergibt einen größeren Bereich als" int "oder" lang ".
* Ungültige Eingabe: Es überprüft, ob "scanf` eine Ganzzahl erfolgreich gelesen hat.
* `Long Long` Datentyp: Die Verwendung von "Long Long" bietet einen größeren Bereich für die faktorielle Berechnung, sodass Sie Faktororials größerer Zahlen berechnen können, bevor Sie über den Überlauf stoßen. Aber selbst "lang" hat jedoch Grenzen. Faktorien wachsen extrem schnell.
* Fehlermeldungen klären: Die Fehlermeldungen informieren den Benutzer über das spezifische Problem.
* Beendencodes: Das Programm verwendet geeignete Exit -Codes (0 für den Erfolg, 1 für Fehler), was eine gute Praxis für Programme ist, die möglicherweise aus anderen Skripten oder Programmen aufgerufen werden.
Denken Sie daran, dass die Faktorien unglaublich schnell werden. Sogar "lang" wird für relativ kleine Eingänge (z. B. 21!) Überlaufen. Für willkürlich große Faktorien müssten Sie eine spezialisierte arithmetische Bibliothek für willkürliche Präzision verwenden.