首页 > 代码库 > IT公司100题-28-整数的二进制表示中1的个数
IT公司100题-28-整数的二进制表示中1的个数
问题描述:
输入一个整数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.exeinput n:11The num of 1 in 11 is: 3
IT公司100题-28-整数的二进制表示中1的个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。