描述:
输入一个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(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-08 20:18:55