TB椰程 TypeBuddy 打字搭子

2019 数字游戏 · 方案二 二进制位运算

CSP-J 标程 · 复赛真题 · 代码 · cpp · 难度 2/5 · 共 634 字

把 01 串当二进制读入,用 popcount 数 1

  • 2019
  • 位运算

正文

// CSP-J 2019 复赛 T1 · 数字游戏(方案二)
// 原题:https://oj.yecheng.tv/p/CSPJ2019A
//
// 方案二 · 当成二进制数 + 位运算
// 01 串长度固定为 8,把它按二进制读成一个整数 x,
// 再用内置函数 __builtin_popcount(x) 数出 x 的二进制里有几个 1。
// 好处是代码极短,还能顺手复习「字符转数字」和「按位计数」。
// 注意边界:这个办法只在位数很少时成立,长度超过 63 就会溢出,
// 那种情况必须回到方案一的逐字符扫描。

#include <bits/stdc++.h>
using namespace std;

int main() {
    freopen("number.in", "r", stdin);
    freopen("number.out", "w", stdout);

    string s;
    cin >> s;

    // 按二进制拼出整数:每读一位,原来的数左移一位再加上当前位
    int x = 0;
    for (int i = 0; i < (int)s.size(); i++) {
        x = x * 2 + (s[i] - '0');
    }

    cout << __builtin_popcount(x) << "\n";
    return 0;
}

CSP-J 标程 · 复赛真题的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK