码迷,mamicode.com
首页 > 其他好文 > 详细

IT公司100题-28-整数的二进制表示中1的个数

时间:2014-08-28 23:55:36      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   strong   问题   div   代码   

问题描述:

输入一个整数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。
 
代码实现:
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int calc(int num) {
 5     int count;
 6     while(num){
 7         count++;
 8         num = num & (num-1);
 9     }
10     return count;
11 }
12 
13 int main() {
14     cout << "input n: " << endl;
15     int n;
16     cin >> n;
17     int count = calc(n);
18     cout << "The num of 1 in " << n << " is: " << count << endl;
19     return 0;
20 }

输出:

$ ./a.exe
input n:
11
The num of 1 in 11 is: 3

 

IT公司100题-28-整数的二进制表示中1的个数

标签:style   blog   color   os   io   strong   问题   div   代码   

原文地址:http://www.cnblogs.com/dracohan/p/3943343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!