题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
思路:
用num&(num-1)每次可以消去二进制的一个1,写个循环即可。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <time.h>
#include <bitset>
class Solution
{
public:
int cout_Number_bit(int num)
{
int i = 0;
while (num)
{
num = num & (num - 1); //num&(num-1)的结果是每次消去一个1
i++;
}
return i;
}
};
//测试
void test01()
{
Solution s;
srand(time(NULL));//随机种子
int ret;
for (int i = 0; i < 10; i++)//拿10个随机数做测试
{
ret = rand() % 1000;//1.取1000以内的随机数
cout <<ret<<"的二进制位:";
cout << bitset<16>(ret) << endl; //2.输出该数的二进制位
//3.输出结果
cout << ret<<"的二进制有"<<s.cout_Number_bit(ret) << "个1" << endl<<endl;
}
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}