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[];
int main(){
a[] = ;
a[] = ;
int i = ;
while(a[i] < ){ //搞不懂为什们用for语句就输出不对。。。。
i++;
a[i] = a[i-] * i;
}
int n;
scanf("%d",&n);
while(n--){
int m;
scanf("%d",&m);
for(int j = i - ; j > ;j--){
if(m >= a[j]){
m -= a[j];
}
}
if(m==)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return ;
}
04-29 04:21