Проверить, является ли введённое число факториалом какого-нибудь числа - C (СИ)
Формулировка задачи:
Помогите написать программу, которая проверяет является ли введенное число факториалом какого-нибудь числа (на Си). Если не сложно, напишите с пояснениями. У меня никак не получается, а разобраться хочется.
P.S.-Если сможете, то ещё отдельно нужно рекурсивным методом.
Заранее огромнейшее спасибо!
Решение задачи: «Проверить, является ли введённое число факториалом какого-нибудь числа»
textual
Листинг программы
#include <stdio.h>
unsigned is_factorial_of(unsigned x)
{
unsigned divisor;
for (divisor = 1; divisor < x; x /= divisor++)
if (x % divisor != 0)
return -1;
return x == divisor ? divisor : -1;
}
int main()
{
for (unsigned i = 0; i < 10000000; ++i)
{
unsigned of = is_factorial_of(i);
if (of != -1)
printf("%u = %u!\n", i, of);
}
}
Объяснение кода листинга программы
- Включаем стандартную библиотеку в код.
- Определяем функцию is_factorial_of(x), которая проверяет является ли число x факториалом какого-нибудь числа.
- Объявляем переменную divisor, которая будет являться делителем в цикле.
- Запускаем цикл от 1 до x, который будет проверять число на делимость.
- Если число делится без остатка на текущий делитель, то возвращаем -1.
- Если число не делится без остатка на текущий делитель, то продолжаем поиск делителя.
- Если число равно текущему делителю, то возвращаем текущий делитель.
- Если число не равно текущему делителю, то возвращаем -1.
- Запускаем цикл в функции main() от 0 до 10000000.
- Для каждого числа i в диапазоне вызываем функцию is_factorial_of(i).
- Если функция вернула не -1, то выводим число i и его факториал на экран.