题目背景
在 GESP 等级考试中,基础的数据处理是必考环节。这道'数字替换'题考察的是对整数与字符串转换的理解,以及基本的字符遍历能力。
题目描述
Alice 不喜欢数字 4,喜欢数字 8,她想把输入整数中的所有 4 都换成 8,如果没有 4 则不修改。
输入输出格式
输入一行,一个整数 A,表示替换前的数。 输出一行,包含一个整数 B,表示替换后的数。
样例
样例 1
输入:
8459045
输出:
8859085
样例 2
输入:
123
输出:
123
数据范围
$0 \le A \le 10^9$
解题思路
拿到这道题,第一反应可能是直接用数学方法取余和除法来逐位处理。但仔细想想,如果要把某一位的数字直接替换成另一个数字,再拼回去,中间涉及到的进位和位置计算会比较麻烦。
其实更直观的做法是把整数当成字符串来处理。既然只是字符层面的替换(4 变 8),把数字转成字符串后,遍历一遍,遇到 '4' 就改成 '8',最后再转回整数或者输出字符串即可。这样逻辑简单,也不容易出错。
代码实现
我们可以这样写,利用 std::to_string 和 std::stoi 进行类型转换,配合简单的循环即可完成替换。
#include <iostream>
#include <string>
using namespace std;
int main() {
// 读取输入
int a;
cin >> a;
// 转为字符串方便处理
string s = to_string(a);
// 遍历并替换
for (char &c : s) {
if (c == '4') {
c = '8';
}
}
// 输出结果
cout << s << endl;
return 0;
}
几个关键点
- 数据类型:虽然题目给的是整数,但用字符串处理更灵活。注意 范围通常能覆盖 $10^9$,无需担心溢出。


