Можно ли представить факториал числа "n" в виде произведения трёх последовательных целых чисел? - C (СИ)
Формулировка задачи:
Помогите пожалуйста... Нужно решить через
операторы цикла
Дано натуральное число n . Выяснить, можно ли представить n!=1*2*3*...*n в виде произведения трёх последовательных целых чисел. Желательно с разъяснениями. Заранее благодарен. Байт мне уже помогал, спасибо ему, но реально, я там ничего не понял(Решение задачи: «Можно ли представить факториал числа "n" в виде произведения трёх последовательных целых чисел?»
textual
Листинг программы
#include <stdio.h>
typedef unsigned long long number_t;
#define NUM_PRESENT "%llu"
number_t fact(number_t n) {
return ( n > 1 ) ? n * fact(n - 1) : 1;
}
int main(void) {
number_t n, a, b, c;
while ( printf("Number: ") && scanf(NUM_PRESENT, &n) == 1 ) {
n = fact(n);
printf("Factorial: " NUM_PRESENT "\n", n);
for ( a = 1, b = 2, c = 3; a * b * c < n; ++a, ++b, ++c )
;
if ( a * b * c > n )
printf("No way!\n");
else
printf(NUM_PRESENT " X " NUM_PRESENT " X " NUM_PRESENT "\n", a, b, c);
}
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Факториал числа
nвычисляется с помощью рекурсивной функцииfact. - В функции
mainпользователю предлагается ввести числоn. - Если число
nбольше 1, то вычисляется его факториал с помощью функцииfact. - Затем в цикле перебираются три последовательных целых числа начиная с 1, 2 и 3 до тех пор, пока их произведение не станет равным или больше факториала
n. - Если произведение трех последовательных целых чисел становится больше факториала
n, то выводится сообщениеNo way!. - В противном случае выводится сообщение с тремя последовательными целыми числами, чье произведение равно факториалу
n.