fak.c
author Markus Brökers <mbroeker@largo.homelinux.org>
Mon, 09 Aug 2010 12:12:55 +0200
changeset 137 d8a0984b72fc
parent 80 5d7057a1b202
permissions -rw-r--r--
From a 'C-Professional' :) Take a look at the source and pray

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