华为机试题-判断二进制中0的个数【4】
2016-07-06 19:32
369 查看
题目描述:
输入一个10进制数字,请计算该数字对应二进制中0的个数,注意左数第一个1之前的所有0都不需要计算。不需要考虑负数的情况。我之前的博客讲过类似的问题,博客地址如下:
http://blog.csdn.net/lpjishu/article/details/51323722思路分析:
首先要注意不是统计所有的0,而是统计第一个1之后的0要使用位运算,如何判断什么时候停止,首先判断一共包含n个1,然后对数字进行右移n次,每次和1进行与运算,统计0的数量
注意:
对于机试,一定注意心细,慢慢的写,注意变量的对错,另外注意变量的初始化代码:
import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("srart"); Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int n = scan.nextInt(); int count = numberOfZero(n); if( count >= 0){ System.out.println(count); } } scan.close(); } //统计n中的0的个个数,注意从左边开始的第一个1之前的0不统计 public static int numberOfZero(int n){ //统计n的1的个数 int countOfOne = 0; //统计计算的截止数字 int count = 0; //统计0的个数 int countOfZero = 0; int input = n; countOfOne = numberOfOne(n); while(input != 0){ if((input & 1) == 1){ count++; if(count == countOfOne){ break; } }else{ countOfZero++; } input = input >>1; } return countOfZero; } //统计n中1的个数 public static int numberOfOne(int n){ int count = 0; while(n != 0){ n = n & (n-1); count++; } return count; } }
我的微信二维码如下,欢迎交流讨论
欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!
微信订阅号二维码如下:
相关文章推荐
- 只有程序员看的懂的面试圣经|如何拿下编程面试
- 下一次技术面试时要问的 3 个重要问题
- 华为路由器密码恢复
- 华为交换机的后缀详解
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 使用位运算实现网页中的过滤、筛选功能实例
- C#常见算法面试题小结
- C#枚举中的位运算权限分配浅谈
- shell 基本计算、逻辑运算、位运算详解
- php 面试碰到过的问题 在此做下记录
- asp.net 面试+笔试题目第1/2页
- Java位运算和逻辑运算的区别实例
- 优秀程序员必须知道的20个位运算技巧
- 图文详解C语言位运算基础知识
- asp.net 面试 笔试题目[附答案]第1/3页
- JavaScript使用位运算符判断奇数和偶数的方法
- java位运算加密示例
- c语言中用位运算实现加法技巧介绍
- 基础的十进制按位运算总结与在Python中的计算示例
- 华为RAID 1阵列卡设置教程图文详解