牛客网在线编程:幸运数

题目:

小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。
现在对于一个数字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
思路:

求十进制和二进制各位的和,使用sum+=n%10,n/=10;和sum+=n%2,n/=2;
输入用Scanner sc = new Scanner(System.in);
int n = sc.nextInt();

 1 import java.util.*;
 2 public class LuckyNumber {
 3     //十进制求和
 4     public static int f(int n){
 5         int sum = 0;
 6         while(n!=0){
 7             sum += n%10;
 8             n/=10;
 9         }
10         return sum;
11     }
12     //二进制求和
13     public static int g(int n){
14         int sum = 0;
15         while(n!=0){
16             sum += n%2;
17             n/=2;
18         }
19         return sum;
20     }
21     public static void main(String[] args) {
22         // TODO Auto-generated method stub
23         Scanner scanner = new Scanner(System.in);
24         while(scanner.hasNext()){
25             int n = scanner.nextInt();
26             int count = 0;
27             for(int i = 1; i <= n;i++){
28                 if(f(i)==g(i)){
29                     count++;
30                     //System.out.println(i);
31                 }
32             }
33             System.out.println(count);
34         }
35     }
36 
37 }
原文地址:https://www.cnblogs.com/zlz099/p/8509510.html