华为机试题-判断二进制中0的个数【4】
2016-07-06 19:32
274 查看
题目描述:
输入一个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面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!
微信订阅号二维码如下:
相关文章推荐
- 华为机试题-判断二进制中0的个数【4】
- C++时间与字符串转换
- 停车收费平板软件
- java面试宝典
- 各种资源网址
- android ndk开发之Log日志(二)
- 113---如何整合SSH框架
- django 将删除的表重新生成
- 整合Open vSwitch与DNSmasq为虚拟机提供DHCP功能
- mysql版本问题sql_mode=only_full_group_by
- MySQL架构优化实战系列2:主从复制同步与查询性能调优
- 16.7.6
- Android安全–一次简单的脱壳Dump dex实践
- 关于pandas的一些应用
- 2016春季练习——搜索
- Collection,List,Set,Map的区别
- 秒懂java中junit单元测试
- Hibernate Validator
- windows--nginx关闭进程
- Android使用OpenCV实现「人脸检测」和「人脸识别」