您的位置:首页 > 其它

华为机试题-判断二进制中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面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: