给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
2
9
10
Yes
No
#include<stdio.h>
long num[12];//因为n小于100000,所以10就足够,10!>100000
int main()
{
int t,n;
int i,j,k;
num[1]=1;
for(i=2;i<=12;i++)
num[i]=i*num[i-1];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=12;i>=1;i--)
if(n>=num[i])
n-=num[i];
//因为不能重复使用,所以从大到小符合条件就减就好
if(n==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
原文:http://blog.csdn.net/wangluoershixiong/article/details/41014467