华为机试题-判断二进制中0的个数【4】
华为,机试,面试,位运算2016-07-06
输入一个10进制数字,请计算该数字对应二进制中0的个数,注意左数第一个1之前的所有0都不需要计算。不需要考虑负数的情况。
http://blog.csdn.net/lpjishu/article/details/51323722
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;
}
}