题解
倒序三位数
1 条题解
-
0
P4217 倒序三位数(入门)
解题思路
三位数就像三层抽屉:百位、十位、个位。要把它倒过来,就要先把三个抽屉里的数字分别拿出来,再反过来装回去。
拿数字的方法(以 243 为例):
- 个位 g = n % 10,就是除以 10 的余数,243 % 10 = 3。
- 十位 s = n / 10 % 10,先去掉个位变成 24,再取余 24 % 10 = 4。
- 百位 b = n / 100,直接整除 100 得到 2。
倒过来就是把 3 当百位、4 当十位、2 当个位,拼成新数:3×100 + 4×10 + 2 = 342。
为什么要用整数拼接而不是直接输出三个数字?因为如果是 100 这样的数,倒过来应该是 001,也就是 1。直接输出"0 0 1"三个数字会带前导 0;而用整数拼接算出 0×100 + 0×10 + 1 = 1,结果自动去掉前导 0,更正确。不过本题输入保证 100~999,用 int 拼接的结果一定是一个不超过 999 的数。
参考代码
// 用途:输入一个三位整数,把百位、十位、个位倒过来组成新整数输出 #include <iostream> using namespace std; int main() { int n; cin >> n; int g = n % 10; // 个位:除以10的余数 int s = n / 10 % 10; // 十位:先去掉个位再取余 int b = n / 100; // 百位:直接除以100 // 个位当百位、十位当十位、百位当个位,拼成新整数 cout << g * 100 + s * 10 + b << endl; return 0; }复杂度分析
只做了固定的几次除法、取余和乘法,不管 n 是 100 还是 999,步骤都一样多,时间复杂度 O(1),额外空间 O(1)。n 的范围是 100~999,倒过来最大还是 999,中间结果都用 int,绝对不会溢出。
- 1