反向输出一个三位数

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

反向即三段取余直出:个位、十位、剩余高位依次逐段打印,逐段输出天然保留前导零,C 的向零截断让负数也直接成立。

OJ: roj

题目 ID: 1031

难度:入门

标签:输入输出数学python

创建: 2026-09-29 14:40

更新: 2026-10-04 23:00

题目描述

将一个三位数反向输出,例如输入 358358,反向输出 853853。输入是一个三位数 nn;输出反向结果,低位零形成的前导零必须保留(如输入 100100 输出 001001)。

思路

把"反向"直译成三段取余公式:个位段 n mod 10n \bmod 10、十位段 (n/10) mod 10(n/10) \bmod 10、剩余高位段 n/100n/100,按顺序逐段打印。逐段输出天然保留前导零;C++ 的 /、% 向零截断,负数时三段各带负号也直接成立。

参考代码

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-09-29 14:43
# update_at: 2026-09-29 14:43

import sys


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    n = next(data)                       # 按整数读入,三段数位各自成项、逐项拼接
    sign = -1 if n < 0 else 1            # C 的 / 与 % 向零截断,Python 的 // % 要手动补符号
    m = abs(n)
    ones = sign * (m % 10)               # 个位:反向后的第 1 位
    tens = sign * (m // 10 % 10)         # 十位:反向后的第 2 位
    rest = sign * (m // 100)             # 更高位:作为整体原样接在末尾
    print(f"{ones}{tens}{rest}")         # 逐段打印,前导零自然保留(100 → 001)


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-04 23:00
 * update_at: 2026-10-04 23:00
 */
#include <cstdio>

typedef long long ll;

ll n; // 输入的数(题面是三位数,逐段公式对更长输入与负数也成立)

int main() {
    scanf("%lld", &n);
    // "反向"直译成三段公式:个位段 n%10、十位段 (n/10)%10、剩余高位段 n/100
    // 逐段打印天然保留前导零(100 -> 001)
    // C 的 /、% 向零截断,负数时三段各带负号(-444 -> -4-4-4),无需额外处理
    printf("%lld%lld%lld\n", n % 10, (n / 10) % 10, n / 100);
    return 0;
}