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

4 Lösungen Lösungen öffentlich
#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
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;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2110017

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.