开发者

Factorial -C (Linux)

开发者 https://www.devze.com 2023-01-14 12:41 出处:网络
Please suggest me a more efficient alternative to go about this Program #include <stdio.h> int main(void)

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++)
    {
       开发者_JAVA技巧 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);

}


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.


You can use Stirling's formula as an approximation for large factorials. If very large exact factorials are needed, you'll need to use bignum arithmetic. The asymptotically-best efficiency is obtained by computing n! from its prime factorization. For more algorithms, check this


You can use Stirling's approximation to calculate the factorial for large numbers.


See the Fast Factorial Functions website and to the Computation section of the Factorial Wikipedia article.

0

精彩评论

暂无评论...
验证码 换一张
取 消