Задача
Вычислите факториал числа.
Входные данные
Одно целое число [latex]n[/latex] ([latex] 0 \leqslant n \leqslant 20[/latex]).
Выходные данные
Выведите значение [latex]n! = 1 · 2 · 3 · … · n.[/latex]
Тесты
Входные данные | Выходные данные |
---|---|
3 | 6 |
0 | 1 |
20 | 2432902008176640000 |
Код № 1
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> using namespace std; int main() { int n; long factorial = 1; cin >> n; for(int i = 1; i <= n; i++) { factorial *= i; } cout << factorial; } |
Решение № 1
Факториал натурального числа [latex]n[/latex] определяется как произведение всех натуральных чисел от [latex]1[/latex] до [latex]n[/latex] включительно.
Код № 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; long factorial (int a) { if (a == 0) return 1; else return a*factorial(a - 1); } int main() { int a, n; cin >> n; cout << factorial(n); return 0; } |
Решение № 2
Также факториал числа можно найти при помощи рекурсивной функции (функции, которая вызывает сама себя).
Ссылки
Условие задачи на E-Olymp
Код задачи № 1 на Ideone
Код задачи № 2 на Ideone
Спасибо, постаралась исправить.
Отступы…
В 17-й строке return 0; находится внутри фигурных скобок. Значит он должен быть сдвинут вправо, как и остальной код. И заодно уберите пустую строку если она Вам не слишком важна.
Исправила, большое спасибо! Пропустила этот момент по невнимательности. Обязательно учту его в следующих работах.
И последняя ссылка не работает. Вы там по невнимательности ничего не написали…
Хорошо. Молодец.
Остались, конечно непонятные моменты. Например, зачем вам использовать длинные целые для хранения чисел, которые не превышают 20? Исправьте, пожалуйста.
Кстати, есть еще одна версия рекурсии со своими преимуществами и недостатками. Посмотрите, пожалуйста.
Спасибо большое, исправила. Еще я поменяла long long на long. Так e-olimp тоже на 100% принимает.