概述
《剑指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的个数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复