C :: Aufgabe #25

4 Lösungen Lösungen öffentlich

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:

vote_ok
von Ethon (100 Punkte) - 05.01.2013 um 16:08 Uhr
Rekursiv:
Quellcode ausblenden 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;
}
vote_ok
von Marius (110 Punkte) - 07.01.2013 um 03:22 Uhr
Quellcode ausblenden C-Code
#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;
}
vote_ok
von devnull (8870 Punkte) - 09.07.2013 um 10:07 Uhr
Quellcode ausblenden C-Code
/****************************************
  * 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;
}
vote_ok
von kathleenw (3600 Punkte) - 01.07.2020 um 09:31 Uhr
Quellcode ausblenden C-Code
#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;
}

2109775

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.