Вычисление факториала циклом в C и C++
В этом уроке вы вычислите факториал числа с помощью цикла и сохраните результат в достаточно большом типе.
Введение
Факториал n, обозначаемый n!, - это произведение всех положительных целых чисел от 1 до n; например, 6! = 720. Факториал растёт очень быстро, поэтому, чтобы избежать переполнения, нужен достаточно большой тип, например unsigned long long.
Главное
- Включите предупреждения компилятора (compiler warnings) и исправьте их все.
- Хорошо понимайте тип и время жизни (lifetime) каждого значения.
- Всегда проверяйте входные данные и границы индексов массивов.
Примеры кода на C и C++
#include <stdio.h>
int main(void) {
int number = 6; unsigned long long result = 1;
// Multiply each value into the running product.
for (int value = 2; value <= number; ++value) result *= value;
printf("%d! = %llu\n", number, result);
}
6! = 720
#include <iostream>
int main() {
int number = 6; unsigned long long result = 1;
// Multiply each value into the running product.
for (int value = 2; value <= number; ++value) result *= value;
std::cout << number << "! = " << result << '\n';
}
6! = 720
Сравнение C и C++
Переменная result начинается с 1, поэтому 0! и 1! получаются верными без особой обработки. Цикл по очереди умножает result на каждое число от 2 до number. Спецификатор %llu в printf нужен, чтобы вывести значение типа unsigned long long.
C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.
C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.
Упражнения для практики
Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.
- Проверьте неверный ввод и граничные значения.
- Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
- Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
Все задачи