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,将阶乘从大到小能减就减,最后判断是否等于0C++代码:
#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;
}
转载于:https://www.cnblogs.com/Weixu-Liu/p/10526023.html
相关资源:基于visual Studio2013解决C语言竞赛题之阶乘求和