题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述
输入一个整数(int类型)
输出描述
这个数转换成2进制后,输出1的个数
示例
输入:5
输出:2
思路
- 这一题和《剑指Offer》第十一题二进制中1的个数类似,输入正整数在内存中以二进制存储,如果一个整数不为0,那么这个整数至少有一位是1。如果将这个整数减1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有0都会变成1,其余所有位将不会受到影响。将二进制数与减1结果进行与操作,使得结果为0的次数即为二进制中1的个数。例如:正整数12,其二进制表示为1100,则
#include <iostream>
using namespace std;
int main(){
int input;
cin>>input;
int count=0;
while(input!=0){
count++;
input=(input-1)&input;
}
cout<<count<<endl;
return 0;
}
- 将二进制数与整数1的二进制进行与操作,并进行右移操作,最终可获得二进制中1的个数。
#include <iostream>
using namespace std;
int main(){
int input;
cin>>input;
int count=0;
while(input>0){
if(input&1){
count++;
}
input=input>>1;
}
cout<<count<<endl;
return 0;
}