TB椰程 TypeBuddy 打字搭子

2023-09 · 4级 · 变长编码

GESP 标程 · 考级真题 · 代码 · cpp · 难度 5/5 · 共 963 字

CCF 原卷官方标程 · 位运算 · 本地编译通过(样例文本抽取有缺字,以 OJ 原题为准)

  • 2023-09
  • 位运算

正文

// GESP 2023-09 C++ 4级 编程题 2 · 变长编码
// 原题:https://oj.yecheng.tv/p/gs2309l4p2
// 官方原卷:https://gesp.ccf.org.cn/101/attach/1570611272876064.pdf
// 题意:小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。
// 知识点:位运算
// 参考程序:CCF 原卷官方标程,PDF 抽取后已去行号;本地编译核验通过,供打字练习
// 原卷样例验证:样例验证 2/3 通过
// 提示:官方样例答案由 PDF 文本化生成,空格/换行可能缺失,样例对比未全通过;程序保持官方原样
//
#include <iostream>
using namespace std;
void output_digit(int d) {
    if (d >= 10)
        cout << (char)('A' + d - 10);
    else
        cout << (char)('0' + d);
}
void output_code(int s) {
    output_digit(s >> 4);
    output_digit(s & 0x0f);
}
int main() {
    long long n = 0;
    cin >> n;
    int split[10];
    int l = 0;
    while (n > 0) {
        split[l] = (int)(n & 0x7f);
        n >>= 7;
        l++;
    }
    for (int i = 0; i < l - 1; i++)
        split[i] |= 0x80;
    output_code(split[0]);
    for (int i = 1; i < l; i++) {
        cout << " ";
        output_code(split[i]);
    }
    cout << endl;
    return 0;
}

GESP 标程 · 考级真题的其它内容

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