1106 是否阶乘之和?
题目描述
输入一个整数N,判断其是否可以表示成一个正整数阶乘的形式或者几个不同正整数的阶乘之和。
输入描述
/*
输入一个整数N。
*/
4
-1
0
6
^Z
输出描述
/*
对应该整数N,若可以表示,输出YES,否则输出NO
提示:单个整数阶乘的最大值到12!,即479001600。
*/
NO
NO
NO
YES
#include<stdio.h>
#include<string.h>
//判断某数是否为阶乘和
int isFactorialSum(int n) {
int k = 2;
if (n <= 0){
return 0;
}
else if (n== 1 || n==2){
return 1;
}
if(n%2 == 1){ //阶乘都是偶数,递归判断
return isFactorialSum(n-1);
}
while(1){
if (n%k != 0){
break;
}
while(n%k == 0){
n = n/k;
k++;
}
if(n == 1){
return 1;
}
if(n<k){
break;
}
n--;
}
return 0;
}
int main()
{
int n=0;
while(scanf("%d",&n)!=EOF){
if(isFactorialSum(n))
printf("YES
");
else
printf("NO
");
}
return 0;
}
这题代码是复制网上大佬的,有点看不懂,有没有小伙伴可以交流下思路。