Учебная версия на русском. Код и его вывод сохранены в исходном виде.
Факториал на C
Вычисляйте произведение от 1 до N с проверкой диапазона числового типа.

Для неотрицательного целого N факториал N! равен произведению чисел от 1 до N; по определению 0! = 1. Начните накопление с единицы и умножайте на каждый множитель или используйте рекурсию с базовым случаем.
Факториал быстро растёт. До умножения проверяйте максимальное значение типа: переход к long long не убирает предел. Переполнение знакового целого не даёт допустимого результата.
Проверьте N = 0, N = 1 и наибольшее поддерживаемое значение. Итеративная версия использует O(N) времени и O(1) дополнительной памяти.
Код C
#include <stdio.h>
unsigned long long calculate_factorial_iterative(int n) {
if (n < 0) return 0;
unsigned long long fact = 1;
for (int i = 1; i <= n; i++) {
fact *= (unsigned long long)i;
}
return fact;
}
unsigned long long calculate_factorial_recursive(int n) {
if (n <= 1) return 1;
return (unsigned long long)n * calculate_factorial_recursive(n - 1);
}
int main(void) {
int numbers[] = {0, 1, 5, 7, 10, 12};
int count = sizeof(numbers) / sizeof(numbers[0]);
printf("--- C Factorial Computation Summary ---\n");
for (int i = 0; i < count; i++) {
int val = numbers[i];
printf("%2d! = %-12llu (Recursive: %llu)\n",
val,
calculate_factorial_iterative(val),
calculate_factorial_recursive(val));
}
return 0;
}Открыть в компилятореОжидаемый вывод
--- C Factorial Computation Summary --- 0! = 1 (Recursive: 1) 1! = 1 (Recursive: 1) 5! = 120 (Recursive: 120) 7! = 5040 (Recursive: 5040) 10! = 3628800 (Recursive: 3628800) 12! = 479001600 (Recursive: 479001600)
Частые вопросы
Почему код и вывод остаются на английском?
Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.