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

AK CSP › CSP-J 2026 第一轮真题 › 第 22 题

CSP-J 2026 第一轮 第 22 题:程序(二):当输入为 123 456 时,程序输出为 0579

阅读程序 · 枚举与模拟 · 答案 √

题目

#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,可能包含前导零。

本小题

当输入为 123 456 时,程序输出为 0579。( )

选项

  • √. 正确
  • ×. 错误

答案

√

题解

答案:√ 正确。

程序把数字倒序存入数组,让下标 0 对应个位:

  • 123 存为 a[0]=3,a[1]=2,a[2]=1
  • 456 存为 b[0]=6,b[1]=5,b[2]=4

a、b、c、carry 都是全局数组,未赋值的元素默认是 0。两个数的长度都是 3,计算循环的条件是 i < 4,所以会多计算一位:

下标 i计算 a[i] + b[i] + carry[i]c[i]
0(个位)3 + 6 + 09
1(十位)2 + 5 + 07
2(百位)1 + 4 + 05
3(千位)0 + 0 + 00

输出循环从 i=3 到 i=0,依次输出 0、5、7、9,因此结果为 0579。

关键是:程序固定多输出一位,没有去掉最高位的零。

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