题目描述
输入一个整数N,判断其是否可以表示成一个正整数阶乘的形式或者几个不同正整数的阶乘
思路:
假设a<b<c;如果n=a!+b!+c!,则n=a!(1+ (a+1)(a+2)* *(b)+ (a+1)(a+2)* *(b)*(b+1)** *(c));
则n可以整除a!。
可以看出,如果n是阶乘之和,则从i=1开始递增,如果n可以整除i,则n不断除以i,直到遇到n不能整除i,则(n-1)一定可以整除i。
输入要求
输入一个整数N。
输出要求
对应该整数N,若可以表示,输出YES,否则输出NO
输入样例
4 -1 0 6 ^Z
输出样例
NO NO NO YES
提示
单个整数阶乘的最大值到12!,即479001600。
#include <stdio.h>
int main() {
int n, t;
while (scanf("%d", &n) != EOF) {
if (n > 0) {
int i = 1;
t = 1;
while (n > 1) {
if (((n / i)*i) == n) {
n /= i;
} else {
n--;
if (((n / i)*i) == n) {
n /= i;
} else {
t = 0;
break;
}
}
i++;
}
if (t)
printf("YES\n");
else
printf("NO\n");
} else
printf("NO\n");
}
return 0;
}