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

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

 


1 题目

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

 

 

2 代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部