题目描述
有些数可以表示成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和。
输入格式
输入包含多组测试数据。每组输入为一个非负整数n(n<=1000000),当n为负数时,输入结束。
输出
对于每组输入,如果n可以表示成若干个不同阶乘的和,则输出YES,否则输出NO。
样例输入
9
-1
样例输出
YES
看到这道题时,考虑到10!>1000000,所以n为数字1~9的阶乘之和。
#include<cstdio>
#include<iostream>
using namespace std;
int shu(int k)//计算阶乘的函数
{
int s=1,i;
for(i=1;i<=k;i++)
s=s*i;
return s;
}
int main()
{
int n,j;
while(cin>>n&&n>0){
int sum=0;
for(j=1;j<=10;j++){
sum+=shu(j);
if(n==sum){
cout<<"YES"<<endl;
break;
}
}
if(n!=sum)
cout<<"NO"<<endl;
}
return 0;
}