正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-S 2022 第一轮真题 › 第32题

CSP-S 2022 第一轮 第32题:当输入为“-2558”时,输出为

阅读程序·单选 · 数及其运算与进制转换 · 答案 B

题目

1  #include <iostream>
2  #include <algorithm>
3
4  using namespace std;
5
6  const int MAXL = 1000;
7
8  int n, k, ans[MAXL];
9
10 int main(void)
11 {
12     cin >> n >> k;
13     if (!n) cout << 0 << endl;
14     else
15     {
16         int m = 0;
17         while (n)
18         {
19             ans[m++] = (n % (-k) + k) % k;
20             n = (ans[m - 1] - n) / k;
21         }
22         for (int i = m - 1; i >= 0; i--)
23             cout << char(ans[i] >= 10 ?
24                          ans[i] + 'A' - 10 :
25                          ans[i] + '0');
26         cout << endl;
27     }
28     return 0;
29 }

假设输入的 n 在 int 范围内,k 为不小于 2 且不大于 36 的正整数,完成下面的判断题和单选题:

本小题

当输入为“-255 8”时,输出为(  )。

选项

  • A. 1400
  • B. 1401
  • C. 417
  • D. 400

答案

B

题解

答案是 B. 1401。这段程序将 \(n\) 转换为 \(-k\) 进制,本题就是把 \(-255\) 转为 \(-8\) 进制。

输入 -255 8 后,循环中每次执行:

``cpp ans[m++] = (n % (-8) + 8) % 8; n = (ans[m - 1] - n) / 8; ``

注意:C++ 中负数取余的结果可能为负,例如 -255 % (-8) = -7。

逐步计算:

次数当前 n存入 ans 的数位更新后的 n
1-255132
2320-4
3-441
4110

数组依次存入 1, 0, 4, 1,最后程序逆序输出,所以结果为:

``text 1401 ``

也可以验证: \[ 1\times(-8)^3+4\times(-8)^2+0\times(-8)+1 =-512+256+1=-255。 \]

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号