1 条题解

  • 0
    @ 2025-4-28 9:11:37

    题意分析

    题目要求处理数字的反转操作:

    1. 输入两个已经反转过的数字(如2424对应原数字4242
    2. 将它们反转回原始形式后相加
    3. 将和再次反转输出
      关键点:
    • 反转时要去除前导零(如12001200反转为2121
    • 保证输出结果不含前导零

    解题思路

    1. 反转函数设计
      • 通过不断取模1010和整除1010来反转数字
      • 自动处理前导零问题(如12000021211200→0021→21
    2. 计算流程
      • 读取输入的反转数字
      • 反转两次得到原始数值
      • 相加后再反转结果

    实现步骤

    1. 实现reverse()函数:
      while(n>0){
          j = j*10 + n%10;
          n /= 10;
      }
      
    2. 主程序逻辑:
      • 读取测试用例数量NN
      • 对每组数据:
        • 读取两个数字a,ba,b
        • 反转得到原始值reverse(a)
        • 计算和sum = reverse(a)+reverse(b)
        • 反转和并输出reverse(sum)

    C++实现

    #include<stdio.h>
    
    // 数字反转函数(自动处理前导零)
    int reverse(int n) {
        int j = 0;
        while(n > 0) {
            j = j * 10 + n % 10;
            n /= 10;
        }
        return j;
    }
    
    int main() {
        int n, a, b;
        scanf("%d", &n);
        while(n--) {
            scanf("%d%d", &a, &b);
            // 关键步骤:双重反转相当于原始值
            printf("%d\n", reverse(reverse(a) + reverse(b)));
        }
        return 0;
    }
    

    代码说明

    • reverse函数
      • n%10获取最后一位
      • j*10实现数字左移
      • 循环终止时自动丢弃前导零
    • 输入输出
      • 使用scanf读取NN和每组数据
      • 通过函数嵌套调用reverse(reverse(a)+reverse(b))完成核心计算
    • 时间复杂度O(Nd)O(N \cdot d),其中dd为数字位数

    示例分析
    输入24 1时:

    1. 244224→42(反转)
    2. 111→1(反转)
    3. 42+1=4342+1=43
    4. 433443→34(输出)
    • 1

    信息

    ID
    505
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者