IT公司100题-28-整数的二进制表示中1的个数
2014-08-28 22:23
288 查看
问题描述:
输入一个整数n,求n的二进制表示中,一共有多少个1。例如n=8,二进制表示为00001000,二进制表示中有1个1。
分析:
如果一个数n不为0,那么n-1的二进制表示,与n的二进制表示相比,n的二进制表示最右边的1变为0,而最右边的1所对应的0全部变为1。其余位不受影响。
例如:n的二进制表示为****1000,则n-1的二进制表示为****0111,则n&(n-1)的二进制表示为****0000。将n二进制表示中最右边的1去掉了。
将n赋值为n&(n-1),继续循环此操作,直到n为0。
代码实现:
输出:
输入一个整数n,求n的二进制表示中,一共有多少个1。例如n=8,二进制表示为00001000,二进制表示中有1个1。
分析:
如果一个数n不为0,那么n-1的二进制表示,与n的二进制表示相比,n的二进制表示最右边的1变为0,而最右边的1所对应的0全部变为1。其余位不受影响。
例如:n的二进制表示为****1000,则n-1的二进制表示为****0111,则n&(n-1)的二进制表示为****0000。将n二进制表示中最右边的1去掉了。
将n赋值为n&(n-1),继续循环此操作,直到n为0。
代码实现:
#include <iostream> using namespace std; int calc(int num) { int count; while(num){ count++; num = num & (num-1); } return count; } int main() { cout << "input n: " << endl; int n; cin >> n; int count = calc(n); cout << "The num of 1 in " << n << " is: " << count << endl; return 0; }
输出:
$ ./a.exe input n: 11 The num of 1 in 11 is: 3
相关文章推荐
- IT公司100题-28-整数的二进制表示中1的个数
- 微软100题(28)整数的二进制表示中1的个数
- 微软算法100题28 整数的二进制表示中1 的个数
- 100-28- 整数的二进制表示中1的个数
- 程序员面试题精选100题(22)-整数的二进制表示中1的个数
- 100题_22 整数的二进制表示中1的个数
- 28、整数的二进制表示中1的个数
- 算法习题28:整数的二进制表示中1的个数
- 微软面试100题之27题:整数的二进制表示中1 的个数
- 整数的二进制表示中1的个数(28)
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- 程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
- 28.整数的二进制表示中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1。 例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
- 【100题】第二十八 整数的二进制表示中1的个数
- 程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
- 28.整数的二进制表示中1 的个数
- 28.整数的二进制表示中1 的个数
- 28.整数的二进制表示中1的个数
- 28.整数的二进制表示中1的个数(运算)
- 程序员面试100题(算法)之整数的二进制表示中1的个数(两种方法)