-
描述
-
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
-
输入
-
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
- 如果符合条件,输出Yes,否则输出No; 样例输入
-
2
-
9
-
10
样例输出
-
Yes
-
No
#include<iostream> #include<cstdio> #include<cstring> #define N 14 using namespace std; /*贪心算法,从小于n的最高阶乘减起*/ long fac[N]; void Cal() { int i; fac[1] = 1; for(i=2;i<N;i++) fac[i] = i*fac[i-1]; } int main() { int t,n; Cal();//先计算出阶乘表 cin>>t; while(t--) { cin>>n; int i=1; while(fac[i]<n)i++; //找到第一个比n大的阶乘 while(i>0) { if(n>=fac[i])n = n-fac[i];//当n大于该阶乘时减去该阶乘 i--; } if (n>0) //如果余数不为0则不是 cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; }
-
第一行有一个整数0<m<100,表示有m组测试数据;
NYOJ-91:阶乘之和
最新推荐文章于 2020-09-10 21:25:39 发布