1

请建议我一个更有效的替代方案来执行此计划

#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);

}
4

4 回答 4

5

对于小论点,我同意 Hamish Grubijan 的评论:只需将值制成表格并在运行时查看它们。n! 的值并不多。可以用机器编号表示,因此您可以将它们全部制成表格。

n 的对数!往往更有用。当 n 时,它将适合机器编号!本身就会溢出。请参阅如何计算对数阶乘

于 2010-08-28T15:31:03.390 回答
1

您可以使用斯特林公式作为大阶乘的近似值。如果需要非常大的精确阶乘,则需要使用 bignum 算术。通过计算 n 获得渐近最佳效率!从它的质因数分解。有关更多算法,请检查

于 2010-08-28T14:56:45.557 回答
0

请参阅Fast Factorial Functions网站和Factorial Wikipedia 文章的Computation部分。

于 2010-08-28T15:13:09.900 回答
0

您可以使用斯特林近似来计算大数的阶乘。

于 2010-08-28T14:55:18.650 回答