/**
* fak.c
* Copyright (C) 2008 Markus Broeker
*/
#include <stdio.h>
#include <stdlib.h>
unsigned long long fak (short i)
{
if (i == 0)
return 1;
return (i * fak (i - 1));
}
long double bigfak (short i)
{
if (i == 0)
return 1;
return (i * bigfak (i - 1));
}
int main (int argc, char **argv)
{
short number;
printf ("Enter a number: ");
if (scanf ("%hd", &number) != 1) {
printf ("READ ERROR\n");
return EXIT_FAILURE;
}
if (number < 0 || number > 170) {
printf ("Range Error: %hd ! {0..170}\n", number);
return EXIT_FAILURE;
}
if (number > 20)
printf ("The factorial of %2d is %1.5Lg\n", number, bigfak (number));
else
printf ("The factorial of %2d is %llu\n", number, fak (number));
return EXIT_SUCCESS;
}