GESP C++ 一级真题解析:数字替换
这道题是 GESP 考试中的一道经典入门题,考察的是对整数位数的处理以及条件判断。题目要求很简单:把输入数字中的所有 4 都变成 8,如果没有 4 则原样输出。
题目分析
乍一看,这似乎是一个数学问题,但仔细想想,如果把它当成字符串来处理会更方便。因为我们要操作的是'每一位数字',而不是数值本身的大小。比如输入 8459045,我们只需要从左到右扫描,遇到 4 就打印 8,否则打印原字符。
数据范围说明
题目给出的原始数据范围有些乱码,通常这类题目的约束是 0 ≤ A ≤ 10^9。这意味着数字可能很大,虽然 int 类型在大多数环境下能存下 2×10^9,但为了稳妥起见,或者考虑到某些极端情况,使用字符串存储输入是最安全的做法,也能避免大数运算的麻烦。
解题思路
我们有两种常见的处理方式:
- 整型取模法:通过
% 10和/ 10不断剥离末位数字,判断是否为 4,然后重构数字。这种方法需要注意数字反转的问题,实现起来稍微繁琐一点。 - 字符串遍历法:直接把输入当作字符串读入,遍历每个字符,如果是
'4'就替换成'8',最后输出。对于初学者来说,这个方法逻辑最直观,代码量也最少。
下面我们用第二种方法来实现,这也是 C++ 一级考试中推荐的高效写法。
代码实现
#include <iostream>
#include <string>
using namespace std;
int main() {
// 优化输入输出效率,虽然本题数据量小,但养成好习惯很重要
ios::sync_with_stdio(false);
cin.tie(nullptr);
string a;
if (cin >> a) {
for (char &c : a) {
// 核心逻辑:直接修改字符串中的字符
if (c == '4') {
c = '8';
}
}
cout << a << endl;
}
return 0;
}


