// för llong_max
Långt långa factorial (int n) {
if (n <0) {
fprintf (Stderr, "Error:Factorial är inte definierat för negativa siffror. \ n");
utgång (1); // Avsluta med en felkod
}
if (n ==0) {
return 1;
}
långt långt resultat =1;
för (int i =1; i <=n; i ++) {
if (llong_max /resultat
fprintf (stderr, "Error:Factorial överskrider maximalt långt värde. \ n");
utgång (1);
}
resultat *=i;
}
returresultat;
}
int main () {
int num;
printf ("Ange ett icke-negativt heltal:");
if (scanf ("%d", &num)! =1) {
fprintf (Stderr, "Error:Ogiltig ingång. \ n");
return 1; // Avsluta med en felkod
}
långt långt fakta =faktor (num);
printf ("Factorial of %d =%lld \ n", num, fact);
return 0;
}
`` `
För att kompilera och köra den här koden:
1. spara: Spara koden som en ".c" -fil (t.ex. "factorial.c").
2. kompilera: Öppna en terminal och använd en C -kompilator (som GCC) för att sammanställa koden:
`` `bash
GCC Factorial.C -O FAKTORIAL
`` `
3. Run: Utför det sammanställda programmet:
`` `bash
./faktorial
`` `
Programmet kommer att uppmana dig att ange ett nummer.
Förbättringar och förklaringar:
* Felhantering: Koden innehåller kontroller för:
* Negativ ingång: Den hanterar uttryckligen negativ input, som inte är definierad för fabriker.
* överflöde: Det förhindrar potentiellt överflöde genom att kontrollera om nästa multiplikation skulle överskrida det maximala värde som ett "långt" heltal kan hålla (`llong_max '). Att använda "lång lång" ger ett större intervall än "int" eller "lång".
* Ogiltig ingång: Den kontrollerar om "scanf" framgångsrikt läser ett heltal.
* `lång lång" datatyp: Att använda "Long Long" ger ett större sortiment för faktoriell beräkning, så att du kan beräkna faktorier med större antal innan du möter överflöd. Men till och med "lång lång" har gränser. Factorials växer extremt snabbt.
* Rensa felmeddelanden: Felmeddelandena informerar användaren om det specifika problemet som uppstått.
* utgångskoder: Programmet använder lämpliga utgångskoder (0 för framgång, 1 för fel) vilket är god praxis för program som kan kallas från andra skript eller program.
Kom ihåg att factorials växer otroligt snabbt. Till och med "lång lång" kommer att flyta över för relativt små ingångar (t.ex. 21!). För godtyckligt stora faktorier skulle du behöva använda ett specialiserat arbitriskt precision aritmetiskt bibliotek.