先取绝对值,再逐位取末位拼成反转数;负号最后拼回,原数为 0 时结果为 0。
OJ: roj
题目 ID: 3584
难度:普及-
标签:输入输出字符串python
创建: 2026-10-02 09:04
更新: 2026-10-07 13:50
题目描述
给定一个整数
思路
先取绝对值,然后不断取末位拼到结果后面,循环自然吃掉末尾零带来的前导零;最后再根据原数符号给结果加上负号。
参考代码
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;
}