题目描述
输入一个整数N,判断其是否可以表示成一个正整数阶乘的形式或者几个不同正整数的阶乘之和。
输入要求
输入一个整数N。
输出要求
对应该整数N,若可以表示,输出YES,否则输出NO
输入样例
4 -1 0 6 ^Z
输出样例
NO NO NO YES
提示
单个整数阶乘的最大值到12!,即479001600。
#include<stdio.h>
int main()
{
int n, q,i,e;
while (scanf_s("%d", &n) != EOF) {
q = 0;
if (n <= 0)
q = 0;
else if (n == 1||n==2)
q = 1;
else
{
if (n % 2 == 1)
n = n - 1;
i = 2;
e = 0;
while (1) {
while(n % i == 0) {
e = 1;
n = n / i;
i = i + 1;
}
if(n==1)
{
q = 1;
break;
}
if (i > n||e==0)
break;
if (e == 1) {
n = n - 1;
e = 0;
}
}
}
if (q == 1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
e作为一个开关使用。