poj 1775 Sum of Factorials

#include <iostream>
using namespace std;
int fac[10]={1};
int main()
{
for(int i=1;i<10;++i)
fac[i]
=fac[i-1]*i;
int n ,flag;
while(cin>>n&&n>=0)
{
flag
=1;
for(int i=9;i>=0;--i)
{
if(fac[i]>n)
continue;
n
-=fac[i];
if(n==0)
{
flag
=0;
printf(
"YES\n");
break;
}
}
if(flag)
printf(
"NO\n");
}
return 0;
}
//1,2,4,8,16... 若一个数16<x<32,假如它满足 x=Σ1<=i<=txi! 那么其中肯定有16
//因为i! = 0!+1!+...+(i-1)! ,16=1+1+2+4+8 若没有包括16,16前面即使全部加上也一定小于x
//故只要x大于i!,就必须把i!的值算上

  

posted on 2011-07-22 14:53  sysu_mjc  阅读(77)  评论(0编辑  收藏  举报

导航