牛客网-幸运数

来源:互联网 发布:linux wc 编辑:程序博客网 时间:2024/05/24 05:01
链接:https://www.nowcoder.com/questionTerminal/4d1afe11171c44a385287e29092cdb3f
来源:牛客网

小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字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),他把这种数称为幸运数,现在他想知道,小于等于n的幸运数有多少个?
输入描述:
每组数据输入一个数n(n<=100000)


输出描述:
每组数据输出一行,小于等于n的幸运数个数。
示例1

输入

21

输出

3


import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int num = 0;while(in.hasNext()){int up = in.nextInt();while(up!=0){if(f(up) == g(up))num++;up--;}System.out.println(num);}in.close();}
public static int f(int x) {//10进制各位相加int sum = 0;while(x!=0){sum += x%10;x /= 10;}return sum;}public static int g(int x) {//二进制各位相加int sum = 0;while(x!=0){sum += x%2;x /= 2;}return sum;}}


原创粉丝点击