nyoj 91 阶乘之和

贪心,最大到最小依次加~~


#include <iostream>
#include <cstring>
using namespace std;

int main()
{
	int m;
	cin>>m;
	int f[11];
	memset(f,0,sizeof(f));
	f[1]=1;
	for(int i=2;i<11;i++)
		f[i]=f[i-1]*i;
	while(m--){
		int n;
		cin>>n;
		int i;
		int aim=n;
		int flag=10;
		
		for(i=flag;i>0;i--){
			
				if(aim>=f[i]){
					flag=i-1;	
					aim-=f[i]; 			
				}
		}
		if(aim==0) cout<<"Yes"<<endl;
		else if(aim!=0) cout<<"No"<<endl;
}
	return 0;
}


你可能感兴趣的:(nyoj 91 阶乘之和)