记录每一个加上一个数阶乘
ps:0的阶乘是1
#include <stdio.h>
char flag[1000001];
long int fact[10];
int main ()
{
long int n, i, j, last;
fact[0] = 1;
for (i = 1; i < 10; i++)
fact[i] = fact[i - 1] * i;
flag[0] = 1;
for (i = 1; i <= 1000000; i++)
flag[i] = 0;
last = 0;
for (i = 0; i < 10; i++)
{
for (j = last; j >= 0; j--)
{
if (flag[j] == 1 && j + fact[i] <= 1000000)
flag[j + fact[i]] = 1;
}
last += fact[i];
}
flag[0] = 0;
while (1)
{
scanf("%ld", &n);
if (n < 0)
break;
if (flag[n] == 1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}