Программа на C++ для рассчета факториала

Факториал числа — это произведение всех целых чисел от 1 до этого числа. Факториал может быть определен только для целых положительных чисел.

Факториал отрицательного числа не существует. А факториал 0 равен 1.

Например,

Факториал положительного числа n, скажем 5, обозначается через 5! и задается как:


5! = 1 * 2 * 3 * 4 * 5 = 120

Итак, математическая логика для факториала такова:


n! = 1 * 2 * 3 * ... * n
n! = 1 если n = 0 или n = 1

В приведенной ниже программе пользователю предлагается ввести положительное целое число. Затем вычисляется факториал этого числа и отображается на экране.


// подключаем заголовочный файл для std::cout, std::cin
#include <iostream>

int main() 
{
    int n;
    long double factorial = 1.0;

    cout << "Введите положительное число: ";
    // записываем введенное число в ранее объявленную переменную
    cin >> n;

    if (n < 0)
    {
        cout << "Ошибка! Факториал отрицательного числа не существует.";
    }
    else 
    {
        for(int i = 1; i <= n; ++i) {
            factorial *= i;
        }
        cout << "Факториал числа " << n << " = " << factorial;    
    }

    return 0;
}

Вывод:


$ ./factorial_cpp

Введите положительное число: 12
Факториал числа 12 = 479001600

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

Мы объявили тип переменной factorial как long double, поскольку факториал числа может быть очень большим.

Когда пользователь вводит положительное целое число (скажем, 5), выполняется цикл for и вычисляет факториал. Значение i изначально равно 1.

Программа выполняется до тех пор, пока утверждение i меньше n не станет ложным. При этом на экране выводится факториал 5 = 120.

Стоит отметить, что эта программа может вычислять факториал только для n = 1754 или некоторого целого значения, близкого к нему. Значения больше 1754 уже не будут отображаться корректно, поскольку результаты превышают емкость переменной factorial.

Источник