题目大意
输入一个数,判断这个数能不能用互不相等的非负整数的阶乘的和来表示,例如9=1!+2!+3!.
输入
在输入文件中给出几个非负整数n,每行一个数字,输入的内容以一个负数来结束。
输出
如果可以表示则输出YES否则输出NO.
Sample Input
9
11
-1
Sample Output
YES
NO
【解析】
这道题就是把0-9的阶乘都算出来之后,从9的阶乘开始,一直的比较然后不断的相减,看最后n是否等于0,为0则是可以的否则就不行
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
int factor[10];
int i,n;
factor[0]=1;
for(i=1;i<=9;i++)
{
factor[i]=factor[i-1]*i;
}
while(scanf("%d",&n)&&n>=0)
{
if(n==0)
{
printf("NO\n");
continue;
}
for(i=9;i>=0;i--)
{
if(factor[i]<=n)
n=n-factor[i];
if(n==0)
{
printf("YES\n");
break;
}
}
if(n!=0)
printf("NO\n");
}
return 0;
}