fak.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Thu, 28 May 2009 16:51:26 +0200
changeset 95 d2a071bd1a60
parent 80 5d7057a1b202
permissions -rw-r--r--
java disassembler jdisa disassembles a given java class file and shows the bytecode instructions. it does not currently output the same as javap -c <file>... 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;
}