求解n是否可以使用一个0-x的阶乘的和表示。
1. 确定x的范围,由于n<=1,000,000,故x<=10
2. 求解0-x的各阶乘的值。
3. 如果n值比阶乘值大,n-阶乘值
4. 判断n是否最终为0
#include <iostream>
using namespace std;
/************************************************************************/
/* 求解n 是否可以表示为0-x(x 为一个变量,其中n<=1000,000,故x<=10)的阶乘之和 */
/************************************************************************/
int main()
{
int n,i;
//存放阶乘的和,0-10
int factorials[11] = {10};
factorials[0] = 1;
//求解各个阶乘
for (i=1;i<11;i++)
{
factorials[i] = factorials[i-1] * i;
}
while (cin>>n)
{
for (int k=i-1;k>=0;k--)
{
if (n >= factorials[k])
{
n -= factorials[k];
}
}
if (n == 0)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}