题目描述

给定一个整数 NN,把它十进制数位反转得到一个新数。负号不参与反转,结果仍为负数时负号在最前面;除 N=0N=0 外,反转后的最高位不能是 00。数据范围 ∣N∣≤109|N|\le 10^9。

思路

先取绝对值,然后不断取末位拼到结果后面,循环自然吃掉末尾零带来的前导零;最后再根据原数符号给结果加上负号。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-10-02 09:04
# update_at: 2026-10-04 14:27

import sys


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    n = next(data)

    sign = -1 if n < 0 else 1          # 负号单独保留,不参与反转
    digits = str(abs(n))[::-1].lstrip('0')  # 反转后去掉新数最高位的 0(如 380 -> 038 -> 38)
    print(sign * int(digits or '0'))    # 全是 0 时 lstrip 会得到空串,原数必为 0


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-06 14:34
 * update_at: 2026-10-06 14:34
 */
#include <iostream>
using namespace std;

typedef long long ll;

ll n; // 输入的整数

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;

    // 按绝对值逐位取末位拼成反转后的数
    ll m = n < 0 ? -n : n; // 去掉符号处理
    ll r = 0;
    while (m > 0) {
        r = r * 10 + m % 10;
        m /= 10;
    }

    // 原数为 0 时循环不执行,r 保持 0,正好符合输出
    cout << (n < 0 ? -r : r) << '\n';
    return 0;
}