题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
输入例子:
5
输出例子:
2
题目分析
- 看到这个题目,首先想到的方法就是将整数转换成二进制,然后统计其中1的个数。
- 经过查阅相关资料,发现还有另一种巧妙的方式,即通过n&(n-1)来计算1的个数。(参考:http://blog.csdn.net/zheng0518/article/details/8882394)
题目代码
方法一:
#include<iostream>
using namespace std;
int main(){
int n,m,num=0;
cin>>n;
m=n;
while(m>0){
if(m%2==1)
num++;
n/=2;
m=n;
}
cout<<num<<endl;
return 0;
}
方法二:
#include<iostream>
using namespace std;
int main(){
int n,num=0;
cin>>n;
while(n){
n&=n-1;
num++;
}
cout<<num<<endl;
return 0;
}