题解 | #Sum of Factorials#

Sum of Factorials

http://www.nowcoder.com/practice/42cb1c7f7344466b8cb1710cb12d06b1

#include<iostream>
#include<algorithm>
#include<unordered_set>
using namespace std;

int fac[10];//由于n<=1e6,故分解出的factorial一定<=9  (9!=326880,10!=3628800)
unordered_set<int> S;

int main(){
    fac[0] = fac[1] = 1;
    for(int i=2;i<10;i++) fac[i] = fac[i-1]*i;//先算出十个数的阶乘
    //然后就是枚举这十个数0~9,可以暴搜,这里用位运算枚举
    //十位二进制表示选取结果,第i位为1表示选i,把可以凑出的数加入哈希表
    for(int i=1;i<1<<10;i++){
        int s = 0;
        for(int j=0;j<10;j++){
            if(i>>j&1) s+=fac[j];
        S.insert(s);
        }
    }
    int x;
    while(cin>>x) if(S.count(x)) puts("YES"); else puts("NO");
    return 0;
}

全部评论

相关推荐

05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务