正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-S 2022 第一轮真题 › 第31题
CSP-S 2022 第一轮 第31题:当输入为“1007”时,输出为()。
题目
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 的正整数,完成下面的判断题和单选题:本小题
当输入为“100 7”时,输出为( )。
选项
- A. 202
- B. 1515
- C. 244
- D. 1754
答案
A
题解
答案是 A. 202。
输入 100 7,即 n = 100,k = 7。每次循环先计算一位数字存入 ans,再更新 n:
``cpp ans[m++] = (n % (-k) + k) % k; n = (ans[m - 1] - n) / k; ``
逐步计算:
| 循环次数 | 循环前的 n | 存入 ans 的数字 | 更新后的 n |
|---|---|---|---|
| 1 | 100 | (100 % (-7) + 7) % 7 = 2 | (2 - 100) / 7 = -14 |
| 2 | -14 | (-14 % (-7) + 7) % 7 = 0 | (0 - (-14)) / 7 = 2 |
| 3 | 2 | (2 % (-7) + 7) % 7 = 2 | (2 - 2) / 7 = 0 |
此时 n = 0,循环结束。数组中依次存着 2、0、2,程序倒序输出,结果为:
``text 202 ``
这段程序实际上把十进制数转换为 −k 进制,可以验算: \[ 202_{(-7)}=2\times(-7)^2+0\times(-7)+2=100。 \]
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号