阶乘之和

来源:互联网 发布:广东高考难度 知乎 编辑:程序博客网 时间:2024/06/05 01:02

阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
思路:运用穷举法寻找是否有符合条件的阶乘之和。


#include<iostream>

using namespace std;




int Jx(int n)
{
 if(n==1) return 1;
 else return n*Jx(n-1);

}






int JXH(int n)
{
int i,j,sum=0;
for(i=1;i<n;i++)
{
for(j=i;j<n;j++){
sum+=Jx(j);
if(sum>n) break;
if(sum==n) return 1;
}
//if(sum==n) return 1;
}
return 0;
}


 




int main()
{
 int n;
 cin>>n;
 cout<<"请输入n:";
 if(JXH(n)) cout<<"YES"<<endl;
 else cout<<"NO"<<endl;
 return 0;
}
0 0