酷代码 AI
菜单
服务商

题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数。 新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零 例如输入−380,反转后得到的新数为−83。 输入 输入共 1 行,一个整数 。 输出 输出共 1 行,一个整数,表示反转后的新数。 样例输入 复制 123 样例输出 复制 321

问题分析 我们需要将一个整数的各个位上的数字进行反转,同时处理以下特殊情况: 1. 负数的处理:如果输入是负数,反转后的数也应该是负数。 2. 前导零的处理:反转后的数不能有前导零(除非原数本身就是0)。例如,输入`-380`,反转后应为`-83`而不是`-083`。 3. 零的情况:如果输入是0,输出也是0。 解决思路 1. 符号分离:首先判断输入数字的正负性,记录下符号(正或负),然后对绝对值部分进行处理。 2. 逐位取模和构建新数:通过循环不断地取出原数的最后一位(使用取模运算`%10`),并将其添加到新数的末尾(通过乘以10再加上当前位实现)。原数不断除以10以去掉已经处理过的最后一位。 3. 恢复符号:根据之前记录的符号,给最终结果加上相应的正负号。 4. 边界条件处理:特别注意当输入为0时直接返回0;以及处理过程中可能出现的溢出问题(但在本题中通常不需要考虑,因为Python支持大整数)。 步骤详解 以样例输入`123`为例: - 初始值:num = 123, rev = 0 - 第一次迭代: - pop = 123 % 10 = 3 → rev = rev*10 + pop = 0*10+3=3; num = 123//10=12 - 第二次迭代: - pop = 12 % 10 = 2 → rev = 3*10+2=32; num = 12//10=1 - 第三次迭代: - pop = 1 % 10 = 1 → rev = 32*10+1=321; num = 1//10=0 (结束循环) - 最终结果:321 再比如输入`-380`: - 先提取符号为负,然后处理绝对值380: - pop = 380 % 10 = 0 → rev = 0*10+0=0; num = 380//10=38 - pop = 38 % 10 = 8 → rev = 0*10+8=8; num = 38//10=3 - pop = 3 % 10 = 3 → rev = 8*10+3=83; num = 3//10=0 (结束循环) - 加上符号后得到-83 Python代码实现 ```python def reverse_integer(n): sign = -1 if n < 0 else 1 num = abs(n) rev = 0 while num > 0: pop = num % 10 # 获取最后一位数字 rev = rev * 10 + pop # 构建反转后的数字 num = num // 10 # 移除已处理的最后一位 return sign * rev # 读取输入并输出结果 input_num = int(input()) print(reverse_integer(input_num)) ``` 代码解释 1. 函数定义:`reverse_integer`函数接收一个整数`n`作为参数。 2. 确定符号:通过判断`n`是否小于0来决定结果的符号(`sign`变量)。 3. 处理绝对值:使用`abs(n)`得到`num`,确保后续操作都在非负数上进行。 4. 反转数字:通过循环不断取出`num`的最后一位(`pop = num % 10`),并将其添加到`rev`的末尾(`rev = rev * 10 + pop`),同时更新`num`为去掉最后一位后的值(`num = num // 10`)。 5. 应用符号:最后将反转后的数字乘以之前的符号得到正确结果。 6. 输入输出:从标准输入读取整数,调用函数并打印结果。 这种方法高效且简洁,能够正确处理正数、负数以及包含零的情况。 [2025-12-17 12:22:55 | AI问答 | 990点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多