題目描述
小明同學學習了不同的進制之後,拿起了一些數字做起了遊戲。小明同學知道,在日常生活中我們最常用的是十進制數,而在計算機中,二進制數也很常用。現在對於一個數字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;
}