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