阶乘之和

来源:互联网 发布:摇色子软件 编辑:程序博客网 时间:2024/06/07 02:39

点击打开链接

阶乘之和

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

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

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
题解:注意题中的整数n的范围是1000000,而1~9的阶乘为:1,2,6,24,120,720,5040,40320,362880。可知,判断阶乘时,可以用m减去相应的阶乘数,如果m==0,则成立。


01.#include<iostream>
02.using namespace std;
03. 
04.int main()
05.{
06.int n;
07.int k[9]={1,2,6,24,120,720,5040,40320,362880};
08.cin>>n;
09.while(n--)
10.{
11.bool flag=false;
12.int m;
13.cin>>m;
14.for(int i=8;i>=0;i--)
15.{
16.if(m>=k[i] && m>0)
17.m-=k[i];
18.if(m==0)
19.flag=true;
20.}
21.if(flag)
22.cout<<"Yes"<<endl;
23.else
24.cout<<"No"<<endl;
25.}
26.}