top1编程
← 返回题目
题解

数位分离

1 条题解

  • 0
    @ 2026-8-4 1:18:03

    解题思路

    输入一个两位数,把它的十位和个位拆开,再相加输出。比如 45:十位是 4,个位是 5,4+5=9。

    怎么拆分一个两位数 n?这里要用到两个运算符:

    • 十位:n / 10。整数除以 10 会把个位抹掉,商就是十位。例如 45/10=4。
    • 个位:n % 10。取余运算得到整除后的余数,例如 45%10=5。

    为什么 % 能拿到个位?因为任意两位数都可以写成 十位×10 + 个位 的形式,除以 10 的余数正好就是那个个位。两个运算符配合使用,就能把一个数字“拆”成它的每一位。

    然后算 n / 10 + n % 10,就是十位加个位的结果。题目保证输入的一定是两位数,所以不用额外判断;如果输入的不是两位数,这套方法就不适用了,这也是题目给范围的原因。

    / 和 % 这对运算符是“数位分离”的万能钥匙,以后凡是碰到“拆数字”的题(拆个位、十位、百位),都用它们。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;          // n:输入的两位数
        cin >> n;       // 读入两位数
        int ge;         // ge:个位数字
        int shi;        // shi:十位数字
        ge = n % 10;    // 对10取余,得到个位
        shi = n / 10;   // 除以10,去掉个位,得到十位
        cout << shi + ge << endl;   // 输出十位加个位的和
        return 0;
    }
    

    复杂度分析

    对任意一个两位数,都只做两次运算(一次整除、一次取余)和一次加法,运算次数是固定的。所以时间复杂度是 O(1)。

    空间上只用了 3 个 int 变量,空间复杂度也是 O(1)。

    如果推广到 k 位数,要把每一位都拆出来,需要做 k 次整除和取余,复杂度就是 O(k);但本题固定是两位数,所以是 O(1)。

    • 1