阅读63 返回首页    go 阿里云 go 技术社区[云栖]


阶乘之和

阶乘之和

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

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

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
采用贪心算法,先取最大的,满足条件就更新n的值,如果最后n能变为0,那么就找到了

查看代码---运行号:252522----结果:Accepted

运行时间:2012-10-06 07:49:36  |  运行人:huangyibiao
01.#include <iostream>
02.#include <cstdio>
03.using namespace std;
04. 
05.int main()
06.{
07.//采用打表法
08.long  mul[9] = {1,2,6,24,120,720,5040,40320,362880};
09.int t;
10.cin >> t;
11. 
12.while (t--)
13.{
14.long n;
15.scanf("%ld", &n);
16. 
17.bool flag = false;
18.for (int i = 8; i >= 0; i--)
19.{
20.if (n >= mul[i] && n > 0)
21.n -= mul[i];
22.if (0 == n)
23.flag = true;
24.}
25.if (flag)
26.cout << "Yes\n";
27.else
28.cout << "No\n";
29.}
30.return 0;
31.}

最后更新:2017-04-02 15:14:54

  上一篇:go 国王的魔镜
  下一篇:go Facebook推荐使用Opera取代Chrome