91-阶乘之和
- 内存限制:64MB 时间限制:3000ms 特判: No
- 通过数:71 提交数:191 难度:3
题目描述:
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
输入描述:
第一行有一个整数0<m<100,表示有m组测试数据; 每组测试数据有一个正整数n<1000000;
输出描述:
如果符合条件,输出Yes,否则输出No;
样例输入:
2 9 10
样例输出:
Yes No
预处理小于阶乘100W的(打表),然后每个输入一个数n,将阶乘从大到小能减就减,最后判断是否等于0
C++代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long a[100]; int main(){ a[1] = 1; a[0] = 1; int i = 0; while(a[i] < 1000000){ //搞不懂为什们用for语句就输出不对。。。。 i++; a[i] = a[i-1] * i; } int n; scanf("%d",&n); while(n--){ int m; scanf("%d",&m); for(int j = i - 1; j > 0;j--){ if(m >= a[j]){ m -= a[j]; } } if(m==0) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }