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