查找输入整数二进制中1的个数
题目来源
牛客网:查找输入整数二进制中1的个数
题目描述
输入一个正整数,计算它在二进制下的1的个数。
注意多组输入输出!!!!!!
数据范围: 1≤n≤ 2^31-1
输入描述
输入一个整数
输出描述
计算整数二进制中1的个数
示例1
输入
5
输出
2
说明
5的二进制表示是101,有2个1
示例2
输入
0
输出
0
思路分析
方法一
- 和1按位与,结果为1表示最低位为1,然后左移,下一位再和1按位与,直到数值为0
方法二
- 设输入的数为m,让m和m-1按位与,将得到的结果赋值给m,循环进行。一个数和比自己小1的数按位与会消去二进制中的一个1。
代码展示
方法一
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n=0;
while(cin>>n)
{
int count=0;
while(n)
{
if(n&1)
{
count++;
}
n>>=1;
}
cout<<count<<endl;
}
}
方法二
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n=0;
while(cin>>n)
{
int count=0;
while(n)
{
//一个数和比自己小1的数相与,每次会消去一个二进制1
n&=(n-1);
count++;
}
cout<<count<<endl;
}
}