C :: Aufgabe #25
4 Lösungen

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
Lösungen:
Rekursiv:
C-Code

#include <stdint.h> #include <assert.h> #include <stdio.h> uint64_t fak(uint8_t n) { assert(n <= 20); return n > 1 ? n * fak(n - 1) : 1; } int main() { uint8_t n; for(n = 0; n <= 20; ++n) printf("%d! \t= %llu\n", n, (unsigned long long)fak(n)); return 0; }

#include <stdio.h> int Zahl1,ergebnis,i; int fakultät(int a){ if (a==0) return 1; else return(a * fakultät(a-1)); } int main(){ printf("Zahl fuer fakultaetsberechnung eingeben:\n"); scanf("%d",&Zahl1); printf("Fakultaet der Zahl: %d\n",fakultät(Zahl1)); return 0; }

/**************************************** * 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; }

#include <stdio.h> int fakultaet(int x); int main(void) { int zahl; printf("Geben sie die Zahl ein für die die Fakultät berechnet werden soll: "); scanf("%d", &zahl); printf("\n%d! ist gleich %d \n",zahl, fakultaet(zahl)); } //Berechnet die Fakultät von Zahl x int fakultaet(int x) { if(x>1) return x*fakultaet(x-1); else return 1; }