Факториал в С

Факториал используется во многих областях математики, но в основном используется в разделе математики теория вероятности (перестановках и комбинациях). Факториал-это произведение всех положительных чисел от 1 до n (введенное пользователем число). Простыми словами, мы можем сказать, что факториал n будет 1*2*3*…..*н.

Примечание: Для ненатуральных чисел не существует факториала, а значение !0 = 1.

Факториал положительного числа будет:

!b = b * !(b-1)

Например, !5- это произведение всех цифр от 1 до 5, то есть 1*2*3*4*5=120

Здесь описываются несколько методов вычисления факториала положительного числа в C.

Факториал числа в C с помощью цикла for

Приведенная ниже программа берет у пользователя неотрицательное целое число и вычисляет его факториал с помощью цикла.

#include <stdio.h>
int main(intargc, char *argv[])
{
unsignedintiLoop,iFactorial = 1;
intiNumber=0;
printf(«Введите цифру: «);
scanf(«%d»,&iNumber);
if(iNumber< 0 )
{
printf(«факториал отрицательного числа не существует \n\n\n»);
}
else
{
for(iLoop=1; iLoop<=iNumber; iLoop++)
{
iFactorial*= iLoop;
}
printf(«\n\nФакториал числа %d равен: %u\n\n\n\n»,iNumber,iFactorial);
}
return 0;
}

Когда пользователь вводит отрицательное число.

Выход:

Введите цифру: -3
Факториал отрицательного числа не существует

Когда пользователь вводит положительное число.

Выход:

Введите цифру: 5
Факториал числа 5 равен: 120

Факториал числа с использованием рекурсивного метода

Функция называется рекурсивной, если она вызывается сама по себе. Код:

#include <stdio.h>
//Вычислить факториал в C
unsigned long fact(unsigned long int n)
{
if (n == 0)
{
return 1;
}
else
{
return(n * fact(n — 1));
}
}
//Приводная функция
intmain(intargc, char *argv[])
{
unsigned long n = 0;
unsigned result = 0;
printf(«Введите положительное целое число:»);
scanf(«%lu», &n);
//check negative number
if (n < 0)
{
printf(«\nФакториал отрицательного числа не существует\n»);
}
else
{
result = fact(n);
printf(«\Факториал числа %dравен : %d.\n», n,результат);
}
return 0;
}

Выход:

Введите положительное целое число: 3
Факториал 3 равен: 6
рекурсивная функция в c

Работа вышеуказанного кода

Здесь n = 3
факториал(3) = 3 * факториал(2)
факториал(2) = 2* факториал(1)
факториал(1) = 1 *факториал(0);

Когда n=0, условие становится истинным, рекурсия прекращается и управление возвращается к факториалу(1). Теперь происходит обратный процесс, и функция возвращает значение предыдущим вызовам функции.

Примечание: В рекурсивной функции должна быть конечная точка. Таким образом, конечный результат будет:

факт(3) = 3*2*1 = 6

Факториал числа в C с помощью цикла while

#include <stdio.h>
int main(intargc, char *argv[])
{
unsignedintiLoop = 1,iFactorial = 1;
intiNumber = 0;
printf(«\n\Введите число: «);
scanf(«%d»,&iNumber);
if(iNumber< 0 )
{
printf(«Факториал отрицательного числа не существует\n\n\n»);
}
else
{
while(iLoop<= iNumber)
{
iFactorial*= iLoop; // Произведение от 1 до n
iLoop++; // // Увеличить значение
}
printf(«\n\n Факториал числа %d равен: %u\n\n\n\n»,iNumber,iFactorial);
}
return 0;
}

Вычисление факториала, используя поисковую таблицу

Если вам нужен факториал малого числа, то поисковая таблица-лучший вариант, потому что она быстра по сравнению с методом итерации и рекурсии.

В приведенной ниже программе создана поисковая таблица, которая содержит факториал от-от 0 до 10;

#include <stdio.h>
//Функция возвращает факториал
intiReturnFactorial(int index);
int main(intargc, char *argv[])
{
longintiFactorial =1;
intiNumber = 0;
printf(«Введите целое число: «);
scanf(«%d», &iNumber);
if (iNumber< 0)
{
printf(«\nФакториал отрицательного числа не существует \n»);
}
else
{
iFactorial = iReturnFactorial(iNumber);
printf(«\nФакториал числа%d равен : %lu\n», iNumber, iFactorial);
}
return 0;
}
intiReturnFactorial(int index)
{
//Посмотрите на таблицу
constintacFactValue [11]= {1,1,2,6,24,120,720,5040,40320,362880,3628800};
returnacFactValue[index];
}

2 комментария для “Факториал в С

  • 10.07.2021 в 01:40
    Постоянная ссылка

    Добрый день. В ближайшее время опубликуем материал для СИ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *