京东:幸运数

题目连接: 幸运数

第一种做法:

直接求f(x)和g(x),打个表存个值。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e5+4;
int vis[maxn];
int f(int x);
int w(int x); 
void is_lucky();
int main()
{
	int n,ans;
	memset(vis,0,sizeof(vis));
	is_lucky();
	while(cin>>n)
	{
		ans=0;
		for(int i=1;i<=n;i++)
		{
			if(vis[i]) ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}
int f(int x)		//判断十进制 
{
	int sum=0;
	while(x)
	{
		sum+=x%10;
		x/=10;
	}
	return sum;
}
int w(int x)		//判断二进制 
{
	int sum=0;
	while(x)
	{
		sum+=x&1;
		x/=2;	
	}
	return sum;
}
void is_lucky()		//打个表 
{
	for(int i=1;i<maxn;i++)
	{
		if(f(i)==w(i))	
		{
			vis[i]=1;	
		}
	}
}




猜你喜欢

转载自blog.csdn.net/q1122333/article/details/82857164