http://poj.org/problem?id=1775
题意:问输入一个数是否存在几个数的阶乘和等于它,如9! = 1!+2!+3!。
学到的知识是阶乘增长的速度很快:
1,1,2,6,24,120,720,5040,40320,362880
除了1,1其它的数都比其前边数的和要大。
#include<iostream>
using namespace std;
int main()
{
int Factorial[10];
Factorial[0] = 1;
for(int i = 1;i <= 9; i++)
Factorial[i] = Factorial[i-1]*i;
int n;
while(cin>>n){
if(n < 0)
break;
if(n == 0){
cout<<"NO"<<endl;
continue;
}
for(int i = 9;i >= 0; i--){ //注意i的范围
if(Factorial[i] <= n)
n -= Factorial[i]; //这个条件原因是9个阶乘越来越大,
//并且第i个比之前的和要大
}
if(n == 0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}