您的位置:首页 > 其它

poj 1775 Sum of Factorials

2011-07-22 14:53 513 查看
#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!的值算上


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: