top1编程
← 返回题目
题解

交换两位整数的十位和个位

1 条题解

  • 0
    @ 2026-8-4 1:58:27

    解题思路

    题目给一个两位数,比如 26,要我们把十位和个位交换,得到 62。

    怎么把十位和个位分开?这里要用到两个运算:整除 / 和取余 %。

    • 个位:一个数除以 10 的余数。26 % 10 = 6,所以个位是 6。
    • 十位:一个数除以 10 的商。26 / 10 = 2,所以十位是 2。

    为什么除以 10 就能拆开?因为任何两位数都可以写成"十位 × 10 + 个位"的形式。比如 26 = 2 × 10 + 6。除以 10 取商,十位 2 就浮出来了;取余数,个位 6 就剩下来了。

    分离开以后,把原来的个位变成新数的十位,原来的十位变成新数的个位: 新数 = 个位 × 10 + 十位,也就是 6 × 10 + 2 = 62。

    边界情况想一想:如果输入的是 10,交换后十位是 0、个位是 1,新数是 0 × 10 + 1 = 1。写成整数就是 1,程序输出 1 是完全正确的,不用专门处理。题目保证输入是 10 到 99 的两位数,所以不用再额外判断。

    另外要注意顺序:先算 n % 10 得到个位,再算 n / 10 得到十位,两个数都拿到后再拼成新数,顺序千万不要弄反。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;        // 输入的两位数
        cin >> n;
    
        int ge = n % 10;   // 个位:n 除以 10 的余数
        int shi = n / 10;  // 十位:n 除以 10 的商
    
        int m = ge * 10 + shi;   // 个位变成十位、十位变成个位,组成新数
        cout << m << endl;       // 输出交换后的新数
        return 0;
    }
    

    复杂度分析

    n 始终是一个两位数,程序只做一次除法、一次取余、一次乘法和一次加法,运算次数固定,和 n 的大小无关。所以时间复杂度和空间复杂度都是 O(1)。

    • 1