top1编程
← 返回题目
题解

倒序三位数

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    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