阶乘的和(acwing)

#include"bits/stdc++.h"

using namespace std;
set<int>S;
int n;
int f[10];
void init()
{
	f[0]=f[1]=1;
	for(int i=2;i<10;i++) f[i] = f[i-1]*i;
	for(int i=1 ;i < 1 << 10 ; i ++)
	{
		int s = 0;
		for(int j=0 ; j < 10 ; j ++){
			if(i >> j & 1)
				s+=f[j];
		}
		S.insert(s);
	}
}
int main()
{
	init();
	while(cin >> n && n>=0)
	{
		if(S.count(n)) puts("YES");
		else puts("NO");
	}
	
	return 0;
}

Guess you like

Origin blog.csdn.net/weixin_53013914/article/details/121107776
Recommended