Search code examples
coptimizationfactorial

Factorial -C (Linux)


Please suggest me a more efficient alternative to go about this Program

#include <stdio.h>

int main(void)
{
    int k, i, t;
    int arr[100]; //Declaring an array

    printf("Enter a positive integer: ");
    scanf("%d", &k);

    for (i = 0; i < k; i++)
    {
        //printf("enter a value %d : ", i);
        scanf("%d", &arr[i]);
    }

    for (i = 0; i < k; i++)
    {
        fact(arr[i]);
    }

}

int fact(int num) // defining function fact(Num)
{

    int i;
    int fact1 = 1;

    for (i = 1; i <= num; i++)
    {
        fact1 = fact1 * i;
    }

    printf("%ld\n", fact1);

}

Solution

  • For small arguments, I agree with Hamish Grubijan's comment: just tabulate the values and look 'em up at run time. There aren't that many values for which n! is representable in a machine number, so you could tabulate them all.

    The logarithm of n! is often more useful. It will fit inside a machine number when n! itself would overflow. See How to compute log factorial.