C++请再爱我一次 2026-03-13 22:28 采纳率: 0%
浏览 8

洛谷B4301数字交换

前导 0:整数前对数值无影响的 0。
例如:
·0201 去除前导 0 后为 201;
·00321 去除前导 0 后为 321。
给定一个正整数 n,请将 n 的最高位与最低位的数字进行交换,并输出交换后的结果。如果交换后的结果有前导 0,去除前导 0 后再输出结果。

img

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-03-13 22:29
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    好的,我们来分析这个问题:洛谷B4301数字交换

    题目要求:

    给定一个正整数 n,将它的最高位与最低位的数字进行交换,并输出结果。如果交换后的结果有前导 0,则去除前导 0 后再输出。


    ✅ 解题思路

    1. 获取最高位和最低位的数字
    2. 交换这两个数字的位置
    3. 处理前导 0,即去掉前面的 0。
    4. 输出最终结果

    🔧 具体步骤(有序列表)

    1. 将数字转换为字符串,便于操作每一位。

      • 例如:n = 12345"12345"
    2. 获取最高位和最低位

      • 最高位是字符串的第一个字符。
      • 最低位是字符串的最后一个字符。
      • 例如:highest_digit = '1', lowest_digit = '5'
    3. 交换最高位和最低位

      • 构造新的字符串:new_str = lowest_digit + middle_part + highest_digit
      • 例如:"52341"
    4. 去除前导 0

      • 使用 lstrip('0') 方法去除左边的所有 0。
      • 如果整个字符串全是 0,保留一个 0。
      • 例如:"00052341""52341"
    5. 输出最终结果


    🧠 示例说明

    输入:n = 201
    步骤:

    • 转换为字符串:"201"
    • 最高位:'2',最低位:'1'
    • 交换后:"102"
    • 去除前导 0:"102"(没有前导 0)
    • 输出:102

    💡 代码实现(Python)

    n = input().strip()
    if len(n) == 1:
        print(n)
    else:
        # 获取最高位和最低位
        highest = n[0]
        lowest = n[-1]
        # 中间部分
        middle = n[1:-1]
        # 交换后的新数字
        new_number = lowest + middle + highest
        # 去除前导 0
        result = new_number.lstrip('0')
        # 处理全零的情况
        if not result:
            print('0')
        else:
            print(result)
    

    📌 注意事项

    • 如果输入是一个单个数字(如 n = 5),直接输出即可。
    • 如果交换后的结果是全 0(如 n = 1000 → 交换后是 0001 → 去掉前导 0 得到 1)。
    • 确保在处理前导 0 时不会导致空字符串,此时应输出 0

    ✅ 测试样例

    | 输入 | 输出 | |------|------| | 12345 | 52341 | | 201 | 102 | | 1000 | 1 | | 9 | 9 |


    如有其他问题或需要进一步解释,请随时告诉我!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日