问题标题: 酷町堂:1199

0
0
已解决
胡景波
胡景波
中级光能
中级光能

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;
}


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; }

简单,拜托采纳

0
杜智宸
杜智宸
中级光能
中级光能

用一个数组把1~9的阶乘存起来,如果数比他大就减掉,剪完了如果是0就输出yes

0
汪恺恒
汪恺恒
中级启示者
中级启示者

定义一个数组,把阶乘的值存起来

int a[10]={0,1,2,6,24,120,720,5040,40320,362880};

之后倒叙遍历数组,如果a[i]比n大,就n-=a[i]

最后如果减完(n==0)输出yes,否则输出no

0
汪宇航
汪宇航
新手启示者
新手启示者

比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";

}

只能这样啦,否则你就知道答案啦.

望采纳

0
汪宇航
汪宇航
新手启示者
新手启示者

比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";

}

只能这样啦,否则你就知道答案啦.

望采纳

0
汪宇航
汪宇航
新手启示者
新手启示者

比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";

}

只能这样啦,否则你就知道答案啦.

望采纳

0
汪宇航
汪宇航
新手启示者
新手启示者

比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";

}

只能这样啦,否则你就知道答案啦.

望采纳

0
汪宇航
汪宇航
新手启示者
新手启示者

有三个发错了。。。

我要回答