数字反转

GitHub跳转原题关系图返回列表

分离符号后反转绝对值的数字串,并删除反转结果前端的零。

OJ: noi_openjudge

题目 ID: ch0105-29

难度:入门

标签:字符串模拟数位python

日期: 2026-07-30 23:01

题意

反转一个整数的十进制数位。负数的负号保留在最前面;反转后最高位不能是零。

思路

先记录原数是否为负数,再对绝对值的数字字符串切片 [::-1],得到反转后的数位顺序。

原数末尾的零会在反转后出现在开头,lstrip("0") 可以删除它们。若原数为 00,删除后会得到空字符串,因此用 or "0" 恢复为合法的零。最后再把原先的负号拼回去。

代码

Python代码

python
number = int(input())
sign = "-" if number < 0 else ""
reversed_digits = str(abs(number))[::-1].lstrip("0") or "0"
print(sign + reversed_digits)

C++代码

cpp
#include <cstdio>

int main(){
    int n;
    scanf("%d",&n);
    if( n < 0){
        n = -n;
        printf("-");
    }

    bool is_first_zeor = true;
    while( n != 0){
        int ret = n % 10;
        n /= 10;
        if( ret == 0 && is_first_zeor )
            continue;
        is_first_zeor = 0;
        printf("%d",ret);
    }
    return 0;
}

复杂度

设整数有 dd 位,时间复杂度为 O(d)O(d),字符串操作使用 O(d)O(d) 额外空间。

总结

数字反转可拆为“符号”和“绝对值数位”两部分处理,能自然覆盖负数与末尾零。