fak.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Sat, 13 Nov 2010 04:05:14 +0100
changeset 153 b223089872b6
parent 80 5d7057a1b202
permissions -rw-r--r--
ipv6 support added 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;
}