Codeup1085: 階乘的和(打表+貪心)
阿新 • • 發佈:2019-02-03
題目描述
有些數可以表示成若干個不同階乘的和。例如,9=1!+2!+3!。小明對這些數很感興趣,所以他給你一個正整數n,想讓你告訴他這個數是否可以表示成若干個不同階乘的和。
輸入
輸入包含多組測試資料。每組輸入為一個非負整數n(n<=1000000),當n為負數時,輸入結束。
輸出
對於每組輸入,如果n可以表示成若干個不同階乘的和,則輸出YES,否則輸出NO。
樣例輸入
9
-1
樣例輸出
YES
和HDU2021類似,只不過需要先算出小於1000000的最大的階乘
#include<stdio.h>
int main()
{
int a[11];
a[0]=1;
int n,i;
for(i= 1;i<11;i++)
{
a[i]=1;
int s=i;
for(int j=s;j>0;j--)
{
a[i]*=j;
}
}
while(scanf("%d",&n)!=EOF)
{
int flag=0;
if(n<0) break;
if(n==0) printf("NO\n");
else
{
for(i=9;i>=0;i--)
{
if(n>=a[i])
{
n-=a[i];
}
if(n==0)
{
flag=1;
break ;
}
}
if(flag!=0) printf("YES\n");
else printf("NO\n");
flag=0;
}
}
return 0;
}