我是靠谱客的博主 单身御姐,最近开发中收集的这篇文章主要介绍【C/C++练习题】二进制中1的个数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

《剑指Offer》面试题15:二进制中1的个数

 


1 题目

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

 

 

2 代码

#include <iostream>
#include <cstdio>

using namespace std;

//问题:统计二进制数中'1'的个数

//常规解法一:右移判断个位
//输入:数字number
//返回:统计的结果
int number_of_one_1(int number)
{
	int res = 0;

	//1.如果是负数,转换成正数并记入符号位
	if (number < 0)
	{
		number = -number;
		++res;
	}

	//2.进行右移并判断个位是否为'1'
	while (number)
	{
		if (number & 0x01) ++res;
		number >>= 1;
	}

	//3.返回结果
	return res;
}

//常规解法二:对数字进行逐一判断各位
//输入:数字number
//返回:统计的结果
int number_of_one_2(int number)
{
	//1.变量长度
	int res = 0;
	int bits = sizeof(int)*8;

	//2.遍历各位
	for (int i = 0;i < bits;i++)
	{
		if (number & (0x01 << i)) ++res;
	}

	//3.返回统计结果
	return res;
}

//较佳解法:源数值减1后再与操作
//输入:数字number
//返回:统计的结果
int number_of_one_3(int number)
{

	int res = 0;

	while (number)
	{
		++res;
		number &= number - 1;	//清除最后一位'1'

	}
	return res;
}


void test01()
{
	int n = 0;
	cout << "input number:";
	cin >> n;

	cout << "sloution1:"<< number_of_one_1(n) << endl;
	cout << "sloution2:"<< number_of_one_2(n) << endl;
	cout << "sloution3:"<< number_of_one_3(n) << endl;
}

int main(int argc, char const *argv[])
{
	test01();
	return 0;
}

 

3 运行结果

最后

以上就是单身御姐为你收集整理的【C/C++练习题】二进制中1的个数的全部内容,希望文章能够帮你解决【C/C++练习题】二进制中1的个数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部