返回顶部

価格の合計

这道题重点是二进制,想不起来位移运算符了。

个人理解就是移 \(i\) 位,然后看看这个 $ i $ 位上的数字是不是 \(1\) 就行了。

\(Code\)

#include <bits/stdc++.h>
using namespace std;
int n, m, a, sum = 0; // 定义在函数外,默认为0,sum可以不赋值
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; ++i)
    {
        cin >> a;
        // 依题意,二进制从低到高第i位是 >> i,反之亦然
        sum += ((m >> i) & 1 ? a : 0); // 一个三目运算,等价于一个if语句
    }
    cout << sum << endl; // 注意要加上endl
    return 0;
}

还有,平时我做题都会上传至 Gitee 仓库 ,在线查看

posted @ 2022-02-05 16:11  zrc4889  阅读(32)  评论(0编辑  收藏  举报