Редакция для Факториал


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Автор: montes332

1. Идея

Нужно вычислить факториал числа n, то есть произведение всех целых чисел от 1 до n.

Например:

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

По условию также важно помнить, что 0! = 1.

Самый прямой способ — завести переменную-накопитель ans, сначала равную 1, и по очереди умножать её на все числа от 1 до n.

2. Наблюдения

  1. Факториал определяется как произведение подряд идущих чисел от 1 до n.
  2. Если n = 0, цикл от 1 до 0 просто не выполнится ни разу, а ans останется равным 1. Это как раз и даёт правильный ответ.
  3. Ограничение 0 <= n <= 20 подобрано так, чтобы результат помещался в тип long long в C++.
  4. Никаких сложных методов здесь не требуется: достаточно обычного цикла.

3. Алгоритм

  1. Считать число n.
  2. Создать переменную ans и присвоить ей 1.
  3. Для каждого i от 1 до n:
    • умножить ans на i.
  4. Вывести ans.

4. Почему это работает

После начала работы ans = 1.

Дальше цикл последовательно делает:

  • после умножения на 1: ans = 1
  • после умножения на 2: ans = 1 * 2
  • после умножения на 3: ans = 1 * 2 * 3
  • ...
  • после умножения на n: ans = 1 * 2 * 3 * ... * n

Именно это произведение по определению и равно n!.

Если n = 0, произведение чисел от 1 до 0 не содержит множителей, поэтому по определению результат равен 1. В программе это получается автоматически: цикл не выполняется, и ans остаётся равным 1.

5. Сложность

Цикл выполняется n раз, поэтому:

  • время работы: O(n)
  • дополнительная память: O(1)

6. Код на C++17

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    long long ans = 1;
    for (int i = 1; i <= n; i++) {
        ans *= i;
    }

    cout << ans << '\n';
    return 0;
}

7. Код на Python 3

n = int(input())

ans = 1
for i in range(1, n + 1):
    ans *= i

print(ans)

Комментарии

Еще нет ни одного комментария.