C :: Aufgabe #25 :: Lösung #3
4 Lösungen

#25
Fakultät von n berechnen
Anfänger - C
von Dome
- 03.01.2013 um 01:39 Uhr
Schreiben Sie ein Programm, oder eine Funktion, die die Fakultät einer beliebigen Zahl berechnet ohne eine vorhandene Funktion aus der Programmbibliothek zu verwenden.
Konsolenausgabe:
Fakultät von n: 10
3628800
#3

von devnull (8870 Punkte)
- 09.07.2013 um 10:07 Uhr

/**************************************** * fak.c Fakultät nicht rekursiv * * OS : GNU/Linux * compile: gcc -Wall -o fak fak.c * * devnull 09-07-2013 ****************************************/ #include <stdlib.h> #include <limits.h> #include <stdio.h> #include <errno.h> /* return an unsigned int */ unsigned int get_number( void ) { char snum[20]; char *ep; long int lnum=0; while (1) { printf(" positive ganze Zahl: " ); scanf( "%s", snum ); errno = 0; lnum = strtol( snum, &ep, 10); if ((errno==0) && (*ep=='\0')) { if (lnum>=0 && lnum<=INT_MAX) break; printf( "Zahl liegt ausserhalb Limits (0..%d)!\n",INT_MAX ); } else printf( "Eingabe hat kein korrektes 'long int'-Format!\n" ); } return (unsigned int)lnum; } /* calculate factorial with overflow detection */ long int fak( unsigned int n ) { long int fak=1L; int i; for (i=1;i<=n;i++) { fak*=i; if (fak<0) break; /* use sign as carry flag */ } return fak; } /* main */ int main( void ) { unsigned int a = get_number(); long int f = fak(a); if (f<0) printf(" %u! : Overflow (>%ld)\n",a,LONG_MAX); else printf(" %u! = %ld\n",a,f); return 0; }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1