#include <bits/stdc++.h>
using namespace std;
int a[15];
int n;
long long f[1000005];
int main(){
a[1] = 1;
for(int i = 2;i <= 10;i++){
a[i] = a[i-1]*i;
}
cin >> n;
while(n>=0){
memset(f,-1,sizeof(f));
bool flag = false;
f[0] = 0;
for(int i = 1;i <= 10;i++){
for(int j = n;j >= a[i];j--){
f[j] = max(f[j],f[j-a[i]]+1);
}
}
if(f[n] != -1)cout << "YES" << endl;
else cout << "NO" << endl;
cin >> n;
}
return 0;
}
T311433 阶乘之和 题目描述 给定一个非负整数 n,请你判断 n 是否可以由一些非负整数的阶乘相加得到。
输入格式 有若干组数据。每行一个整数 n,保证 n<1000000。 以负数结束输入。
输出格式 对于每组数据输出一行,若可以则输出‘YES’,否则输出‘NO’。