描述:
输入一个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的个数
发布评论