题目分析
Alice 不喜欢数字 4,喜欢数字 8。任务很简单:给定一个整数,把其中所有的 4 都变成 8。如果没有 4,就原样输出。
输入格式
输入一行,一个整数 A,表示替换前的数。
输出格式
输出一行,包含一个整数 B,表示替换后的数。
样例
样例 1:
输入:
8459045
输出:
8859085
样例 2:
输入:
123
输出:
123
数据范围
- $0 \leq A \leq 10^9$
解题思路
这道题考察的是对数字字符的处理。虽然输入是整数,但直接按位取模(%)和除法(/)来遍历每一位数字虽然可行,但处理起来稍微麻烦一点,特别是当需要保持顺序时。更直观的做法是把输入当作字符串来处理,或者在读取后转为字符串。
对于 C++ 初学者来说,使用 std::string 配合简单的循环遍历是最稳妥的方式。考虑到数据范围 $0 \leq A \leq 10^9$,整数类型 int 或 long long 都能存下,但为了操作方便,我们推荐用字符串逻辑。
参考代码
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
for (char &c : s) {
if (c == '4') {
c = '8';
}
}
cout << s << endl;
return 0;
}
代码详解
这里我们直接用 cin 读入字符串,这样天然保留了每一位的数字。遍历字符串中的每个字符,如果发现是 '4',直接改成 '8'。最后输出修改后的字符串即可。这种方法避免了复杂的数学运算,逻辑清晰且不易出错。
注意数据范围最大到 $10^9$,也就是 10 位数,字符串处理完全没问题。如果是纯整数运算,需要注意负数情况(虽然本题范围是非负),以及首位不能为 0 的问题,但字符串法天然规避了这些坑。


