差一点用DP做了 注意0的阶乘是1 总觉得思维不够开阔 这题问一个非负数是否是不同的数的阶乘组成的 可以循环一遍
就出结果的 从大到小循环。。
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[10],n;
a[0]=1;
for(int i=1; i<=9; i++)
a[i]=a[i-1]*i;
while(~scanf("%d",&n)&&n>=0)
{
if(n==0)
{
cout<<"NO"<<endl;
continue;
}
for(int i=9; i>=0; i--)
if(n>=a[i])
n-=a[i];
if(n==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}