PTA |1057 数零壹 分数 20 位运算

201 阅读1分钟

PTA | 程序设计类实验辅助教学平台 (pintia.cn) 刚开始是这样写的:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    unsigned sum = 0;
    int cnt0 = 0, cnt1 = 0;
    for (int i = 0; i < s.size(); ++i) {
        if (isalpha(s[i])) {
            sum += tolower(s[i]) - 'a' + 1;  // 将字母转换为对应的序号
        }
    }

    // 转化为二进制,统计0和1的个数
    while (sum) {
        if (sum & 1) {
            cnt1++;
        } else {
            cnt0++;
        }
        sum >>= 1;
    }

    cout << cnt0 << " " << cnt1 << endl;
    return 0;
}

答案不对:

image.png 原因是cin读取没把读取到空格就中断读取了:

image.png 改成getline之后就可以了:

image.png