描述:

输入一个10进制数字,请计算该数字对应二进制中0的个数,注意左数第一个1之前的所有0都不需要计算。不需要考虑负数的情况。

题目类别:位运算

难度:初级

运行时间限制:无限制

内存限制:无限制

阶段:入职前练习

输入:

要计算的十进制非负数

输出:

二进制中第一个1之后0 的个数

样例输入:

2

样例输出:

1

解题思路:

对于给定的数n,使用位运算:n=n&(n-1)可计算出对应二进制中1的个数,为count1。将input=n,input=input>>1逐个获取input中1的个数,为count2,如果input&1==1,则此时对应位上为0,记数t加1操作,当count1=count2时,循环终止,此时可获得t,即为0个个数,具体实现看下面代码。

代码如下:

public class number_ofZero_bits

{

public static void main(String[] args)

{

Scanner sc=new Scanner(System.in);

while (sc.hasNext())

{

int input=sc.nextInt();

if (input<0)

{

return;

}

int count1=0,count=0,t=0;

int n=input;

while (n!=0)

{

n=n&(n-1);

count++;

}

while (input!=0)

{

if ((input&1)==1)

{

count1++;

if (count1==count)

{

break;

}

}

else

{

t++;

}

input=input>>1;

}

System.out.println(t);

}

sc.close();

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://blog.csdn/zzc8265020/article/details/46923997

更多推荐

华为计算机怎么算进制,2015华为机试—— 计算二进制数的0的个数