题目描述:
定义一个函数f(x)表示x这个数用十进制写出各个数位的数字之和,比如:f(123) = 1 + 2 + 3 = 6;定义一个函数g(x)表示这个数用二进制写出各个位数上的数字之和,比如:123用二进制表示为1111011,那么g(1111011) = 1 + 1 + 1 + 1 + 0 + 1 + 1 = 6。若有一个数x有f(x) = g(x),则说明这个数是幸运数。若给定一个范围n,求小于等于n的幸运数有多少个。
输入:第一行一个整数T(T<=10000)表示数据组数,每组数据输入一个数n(n <= 100000)。
输出:每组数据输出一行,小于等于n的幸运数个数。
样例输入:
3
1
5
21
样例输出:
1
1
3
我写的程序如下:
#include <iostream>
using namespace std;
int f(int n)
{
int sum =