2.二进制中1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中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;
}

猜你喜欢

转载自blog.csdn.net/weixin_49278191/article/details/121101839