#include <stdio.h>
int helper[100];
void getMultiply(); //根据备忘录求解递归表
int getResult(int n);//获取结果
int getIndex(int n);//取得离输入的值最近的且小于的数的位置
int main() {
int m;
int n;
getMultiply();
scanf("%d",&m);
while(m--) {
scanf("%d",&n);
if(getResult(n) == 1){
printf("Yes\n");
}else {
printf("No\n");
}
}
return 0;
}
void getMultiply(){
int i = 2;
helper[0] = 0;
helper[1] = 1;
for(; i < 100 ; i++) {
helper[i] = helper[i-1]*i;
if(helper[i] > 1000000) break;
}
}
int getIndex(int n){
int i;
for(i = 1; i <= 10 ; i++) {
if(n < helper[i])
return i-1;
}
return 0;
}
int getResult(int n){
int i = getIndex(n);
for(;i>=1; i--) {
if(n >= helper[i]){
n=n-helper[i];
}
}
if(n == 0)
return 1;
return 0;
}
时间太晚了,还是有时间再做解释,关键是电脑没有电了,再有几天就可以通宵供电了,真开心!!!
[南阳理工OJ91]阶乘之和
最新推荐文章于 2024-03-20 20:28:48 发布