题目分析
这道题出自 2026 年 3 月的 GESP C++ 一级考试,属于典型的字符串处理入门题。核心需求非常明确:读入一个整数,将其十进制表示中的所有数字'4'替换为'8',若无 4 则保持原样。
虽然题目描述中强调是'整数',但在实际编码时,直接当作字符串处理往往比数学取模运算更直观,也能避免潜在的边界问题。毕竟我们的目标是对数字字符进行替换,而不是数值计算。
解题思路
利用 C++ 标准库中的字符串操作可以很轻松地解决这个问题。
- 读取输入数据。为了便于逐位检查,将输入存储为
std::string是最稳妥的选择。 - 遍历字符串的每一个字符。
- 如果当前字符等于
'4',就将其修改为'8'。 - 最后输出处理后的字符串。
这种方法的时间复杂度是 O(N),其中 N 是数字的位数。对于本题 0 ≤ A ≤ 10^9 以内的数据,性能绰绰有余。
代码实现
#include <iostream>
#include <string>
using namespace std;
int main() {
// 优化输入输出效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
if (cin >> s) {
// 遍历字符串,就地替换
for (char &c : s) {
if (c == '4') {
c = '8';
}
}
cout << s << endl;
}
return 0;
}
关键点说明
注意这里使用了引用 char &c 来遍历字符串,这样可以直接修改原字符串中的字符,无需额外分配内存。如果是初学者,也可以新建一个结果字符串进行拼接,但原地修改效率更高且代码更简洁。
另外,题目给出的数据范围原文有些乱码,通常理解为 0 ≤ A ≤ 10^9。使用 string 类型天然支持任意长度,即便未来数据范围扩大,这段代码依然适用。


