zoukankan      html  css  js  c++  java
  • 华为OJ平台——整数的二进制中1的个数

    题目描述:

    输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

    思路:

    这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过这道题。注意考虑负数的情况(也是难点)

     1 import java.util.Scanner;
     2 
     3 /**
     4  * 输入一个整数,求该整数的二进制表达中有多少个1。
     5  * 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
     6  *
     7  */
     8 public class FindNumberOne {
     9 
    10     public static void main(String[] args) {
    11         // 输入读取参数
    12         Scanner cin = new Scanner(System.in);
    13         int n = cin.nextInt();
    14         cin.close();
    15         
    16         System.out.println(findNumberOf1(n));
    17 
    18     }
    19 
    20     /**
    21      * 主要采用位与(&)的方法来判断
    22      * @param n
    23      * @return
    24      */
    25     private static int findNumberOf1(int n) {
    26         int count = 0;
    27         //从最低位开始判断
    28         int flag = 1;
    29         while(flag != 0){
    30             //通过位与判断该位是否为1
    31             if((n & flag) != 0){
    32                 count++ ;
    33             }
    34             //每次判断完之后flag左移一位,当左移到最后溢出后变为0,则退出循环
    35             flag = flag<<1 ;
    36         }
    37         
    38         return count;
    39     }
    40 
    41 }
  • 相关阅读:
    What is tail-recursion
    Lua(1)
    递归与循环
    android屏幕适配
    Handler 与 Toast
    Android ViewGroup onInterceptTouchEvent
    Java Synchronized 与 ThreadLocal 异同
    Java Synchronized 遇上 静态/实例方法 、静态/实例变量
    Java Concurrent happens-before
    CM记录-JVM调优
  • 原文地址:https://www.cnblogs.com/mukekeheart/p/5594390.html
Copyright © 2011-2022 走看看