1. 程式人生 > >Codeup1085: 階乘的和(打表+貪心)

Codeup1085: 階乘的和(打表+貪心)

題目描述
有些數可以表示成若干個不同階乘的和。例如,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; }