lanqiaoOJ 1331:二进制中 1 的个数 ← bitset

【题目来源】
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






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值