查找输入整数二进制中1的个数

来源:互联网 发布:小米网络全球 编辑:程序博客网 时间:2024/05/21 15:47

题目

梦想还是要有的

描述

请实现如下接口

public static int findNumberOf1(intnum)
{
/* 请实现 */
return 0;
}譬如:输入5 ,5的二进制为101,输出2

输入

输入一个整数

输出

计算整数二进制中1的个数

样例输入

5

样例输出

2

思路1

常规做法,循环判断2出现的次数,通过对2取余看第 i 位是否为1。
读书太少吃得太多

代码1

注意!!
要用unsigned 类型,否则n=n/2在负数的情况下只有0(右移会出错)。

#include<iostream>using namespace std;int main(){    unsigned int n,counter=0;    while(cin>>n)    {        counter=0;        do        {            if(n%2==1){                counter++;//统计            }            n=n>>1;//也可以用=n/2;        }        while(n!=0);        cout<<counter<<endl;    }    return 0;}

思路2

利用位操作符进行运算。
这里写图片描述

代码2

#include<iostream>using namespace std;void findNumberOf1(int num){        int counter = 0;    while(num)    {        counter++;        num &=num-1;//经典位操作    }    cout<<counter<<endl;    return;}int main(){    int intnum;    while(cin>>intnum)    {        findNumberOf1(intnum);    }    return 0;}
0 0