Проверить, является ли введённое число факториалом какого-нибудь числа - 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 и его факториал на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д