【题目来源】
https://www.lanqiao.cn/problems/1331/learning/
【题目描述】
给定一个整数 x,输出该数二进制表示中 1 的个数。
例:9 的二进制表示为 1001,有 2 位是 1,所以函数返回 2。
【输入格式】
输入 x(内存空间为 32 位的整数)。
【输出格式】
第一行输出 x 二进制表示中 1 的个数。
【输入样例】
9
【输出样例】
2
【算法分析】
● 位集合(STL bitset)简介:https://blog.csdn.net/hnjzsyjyj/article/details/148285903
● 利用 bitset<32> s(x); 将 x 转换为 32 位二进制表示。利用 s.count(); 统计 s 中 1 的个数。
【算法代码一:bitset】
#include <bits/stdc++.h>
using namespace std;
int x;
bitset<32> s;
int main() {
cin>>x;
bitset<32> s(x);
cout<<s.count();
return 0;
}
/*
in:12345
out:6
*/
【算法代码二:位运算】
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int x,cnt=0;
scanf("%d",&x);
while(x) {
if(x&1) cnt++;
x=x>>1;
}
printf("%d",cnt);
return 0;
}
/*
in:12345
out:6
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/148285903
https://www.lanqiao.cn/problems/1331/learning/
https://blog.csdn.net/hnjzsyjyj/article/details/148321831
https://blog.csdn.net/hnjzsyjyj/article/details/148315428