正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2026 第一轮真题 › 第 25 题
CSP-J 2026 第一轮 第 25 题:程序(二):当输入为 12345 678 时,输出为
题目
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int a[100007], b[100007], c[100007], carry[100007];
string input_str;
int a_len, b_len;
int main() {
cin >> input_str;
a_len = input_str.size();
for (int i = 0; i < a_len; i++) {
a[i] = input_str[a_len - i - 1] - '0';
}
cin >> input_str;
b_len = input_str.size();
for (int i = 0; i < b_len; i++) {
b[i] = input_str[b_len - i - 1] - '0';
}
carry[0] = 0;
for (int i = 0; i < max(a_len, b_len) + 1; i++) {
c[i] = a[i] + b[i] + carry[i];
if (c[i] >= 10) {
carry[i + 1] = 1;
c[i] -= 10;
} else {
carry[i + 1] = 0;
}
}
for (int i = max(a_len, b_len); i >= 0; i--) {
cout << c[i];
}
cout << endl;
return 0;
}
本题输入的两个数均为非负整数,位数不超过 100000,可能包含前导零。本小题
当输入为 12345 678 时,输出为( )。
选项
- A. 012923
- B. 013023
- C. 13023
- D. 130230
答案
B
题解
答案是 B. 013023。
这段程序模拟竖式加法,把数字倒序存储,让下标 0 对应个位:
a:5, 4, 3, 2, 1b:8, 7, 6,后面的元素为0(全局数组默认初始化为0)。
逐位计算如下:
下标 i | a[i] | b[i] | 传入进位 | c[i] | 向高位进位 |
|---|---|---|---|---|---|
| 0 | 5 | 8 | 0 | 3 | 1 |
| 1 | 4 | 7 | 1 | 2 | 1 |
| 2 | 3 | 6 | 1 | 0 | 1 |
| 3 | 2 | 0 | 1 | 3 | 0 |
| 4 | 1 | 0 | 0 | 1 | 0 |
| 5 | 0 | 0 | 0 | 0 | 0 |
关键在于输出循环从 max(a_len, b_len) = 5 开始,一直输出到 0,所以输出的是:
``text c[5] c[4] c[3] c[2] c[1] c[0] 0 1 3 0 2 3 ``
虽然 12345 + 678 = 13023,但程序没有去掉最高位多余的零,因此实际输出为 013023。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号