中级光能
1199 阶乘之和经验值:1200
题目描述 Description
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出YES,否则输出NO;
输入描述 Input Description
第一行有一个整数0<m<10000,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出描述 Output Description
如果符合条件,输出YES,否则输出NO;
样例输入 Sample Input
2 9 10
样例输出 Sample Output
YES NO
40分的:
#include<iostream>
using namespace std;
int m,n;
long long Pig(long long m){
long long ji=1;
for(int i=1;i<=m;i++){
ji*=i;
}
return ji;
}
bool Judge(int n){
int i=0;
while(n>0){
i++;
n-=Pig(i);
if(n==0){
break;
}
else if(n<Pig(i)){
return false;
}
}
return true;
}
int main(){
cin>>m;
for(int i=1;i<=m;i++){
cin>>n;
if(Judge(n)){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
资深守护
int s[11]={0,3628800,362880,40320,5040,720,120,24,6,2,1}; int main(){ int m,n; cin>>m; for(int i=1;i<=m;i++){ cin>>n; for(int i=1;i<=10;i++){ if(n-s[i]>=0){ n-=s[i]; } } if(n==0)cout<<"YES"<<endl; else cout<<"NO"<<endl; }
简单,拜托采纳
中级启示者
定义一个数组,把阶乘的值存起来
int a[10]={0,1,2,6,24,120,720,5040,40320,362880};
之后倒叙遍历数组,如果a[i]比n大,就n-=a[i]
最后如果减完(n==0)输出yes,否则输出no
新手启示者
比n大就减去,直到差为0,否则输出NO
int a[10]={0,1,2,6,24,120,720,5040,362880}
if(a[i]>n){
减去;
}
if(n==0){
cout<<"YES";
}else{
cout<<"NO";
}
只能这样啦,否则你就知道答案啦.
望采纳
新手启示者
比n大就减去,直到差为0,否则输出NO
int a[10]={0,1,2,6,24,120,720,5040,362880}
if(a[i]>n){
减去;
}
if(n==0){
cout<<"YES";
}else{
cout<<"NO";
}
只能这样啦,否则你就知道答案啦.
望采纳
新手启示者
比n大就减去,直到差为0,否则输出NO
int a[10]={0,1,2,6,24,120,720,5040,362880}
if(a[i]>n){
减去;
}
if(n==0){
cout<<"YES";
}else{
cout<<"NO";
}
只能这样啦,否则你就知道答案啦.
望采纳
新手启示者
比n大就减去,直到差为0,否则输出NO
int a[10]={0,1,2,6,24,120,720,5040,362880}
if(a[i]>n){
减去;
}
if(n==0){
cout<<"YES";
}else{
cout<<"NO";
}
只能这样啦,否则你就知道答案啦.
望采纳