幸運數

題目描述

小明同學學習了不同的進制之後,拿起了一些數字做起了遊戲。小明同學知道,在日常生活中我們最常用的是十進制數,而在計算機中,二進制數也很常用。現在對於一個數字x,小明同學定義出了兩個函數f(x)和g(x)。 f(x)表示把x這個數用十進制寫出後各個數位上的數字之和。如f(123)=1+2+3=6。 g(x)表示把x這個數用二進制寫出後各個數位上的數字之和。如123的二進制表示爲1111011,那麼,g(123)=1+1+1+1+0+1+1=6。 小明同學發現對於一些正整數x滿足f(x)=g(x),他把這種數稱爲幸運數,現在他想知道,大於0且小於等於n的幸運數有多少個?

輸入描述:

每組數據輸入一個數n(n<=100000)

輸出描述:

每組數據輸出一行,小於等於n的幸運數個數。

示例1

輸入

複製

21

輸出

複製

3

思路

沒什麼思路,就注意一點,是從1開始到最後一個數,不是從0開始到n-1;

代碼

#include<iostream>
using namespace std;
int x(int n,int m)
{
	int sum=0;
	while(n>0)
	{
		sum+=n%m;
		n=n/m; 
	}
	return sum;
}
int main()
{
	int a;
	cin>>a;
	int sum=0;
	for(int i=1;i<=a;i++)///******
	{
		int f=x(i,10);
		int g=x(i,2);
		if(f==g)
		{
			sum++;
		}
	}
	cout<<sum<<endl;
	return 0;
 } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章