Факториал -C (Linux) - PullRequest
       15

Факториал -C (Linux)

1 голос
/ 28 августа 2010

Пожалуйста, предложите мне более эффективную альтернативу этой программе

#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 ]

5 голосов
/ 28 августа 2010

Для небольших аргументов я согласен с комментарием Хэмиша Грубиджана: просто табулируйте значения и просматривайте их во время выполнения. Не так много значений, для которых n! может быть представлен в номере машины, поэтому вы можете составить таблицу их всех.

Логарифм n! часто более полезно. Он будет соответствовать номеру машины, когда n! сам переполнится. См. Как вычислить логарифмический факториал .

1 голос
/ 28 августа 2010

Вы можете использовать формулу Стирлинга в качестве приближения для больших факториалов.Если нужны очень большие точные факториалы, вам нужно использовать арифметику Бигнума.Асимптотически лучшая эффективность получается путем вычисления n!от его первичной факторизации.Для дополнительных алгоритмов, проверьте это

0 голосов
/ 28 августа 2010

См. Веб-сайт Быстрые факториальные функции и раздел Вычисления статьи Factorial Википедии.

0 голосов
/ 28 августа 2010

Вы можете использовать приближение Стирлинга для вычисления факториала для больших чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...