fak.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Mon, 08 Mar 2010 18:30:04 +0100
changeset 121 fef2ccfa7b12
parent 80 5d7057a1b202
permissions -rw-r--r--
step 2) Header seperation cpuid, bits, list and maybe lsf are too common names and have to reside in a seperate folder to avoid clashes committer: Markus Bröker <mbroeker@largo.homelinux.org>

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