算法题2

it2025-01-20  30

问题描述:

小明同学在学习了不同的进制之后用一些数字做起了游戏。小明同学知道,在日常生活中最常用的是十进制数,而在计算机中二进制数也很常用。现在对于一个数字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。小明同学发现对于一些正整数α满足f(z)=g(z),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?

输入描述:

每组数据输入一个数n(n<100 000)。

输出描述:

每组数据输出一行,小于等于n的幸运数个数。

解题方法:

#include<vector> #include<iostream> using namespace std; int num=1; int func1 (int n){//递归计算十进制数各位数求和 if(n==0) return 0; else return n%10 + func1(n/10); } int func2 (int n){//递归算二进制数各位数求和 if(n==0) return 0; else return n%2 + func2(n/2); } int is_lucky_number(int n){//递归判断是否是幸运数字 if(n==1) return num; else { if(func1(n) == func2(n)) num++; return is_lucky_number(n-1); } } int main() { int n, x; cin >> n; cout << is_lucky_number(n); system("pause"); }
最新回复(0)