分离整数的各个数

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

反复用 n % 10 取出最低位,再用 n /= 10 去掉最低位,直到 n 为 0。

OJ: roj

题目 ID: 1088

难度:入门

标签:输入输出模拟python

创建: 2026-09-29 18:17

更新: 2026-10-05 00:40

题目描述

输入一个整数 nn(1≤n≤1081 \le n \le 10^8),从个位开始按从低位到高位的顺序输出它的每一位数字,数字之间用一个空格分隔。例如输入 123,输出 3 2 1。

思路

每轮用 n % 10 取出当前最低位,再用 n /= 10 把最低位删掉,循环直到 n 变为 0;这样得到的数字序列自然就是低位在前、高位在后。

参考代码

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 18:17
# update_at: 2026-09-29 18:17

import sys


def digits_from_low(n: int) -> list[int]:
    """拆出 n 的十进制各位,低位在前;用 divmod 一次同时拿到当前位和新商。"""
    out: list[int] = []
    while n:
        n, low = divmod(n, 10)  # low 是当前个位,n 是去掉个位后的商
        out.append(low)
    return out


def solve() -> None:
    """读入一个整数,按从低位到高位的顺序输出它的每一位数字。"""
    n = int(sys.stdin.buffer.read())  # 输入只有一个整数,整体转换即可,不必切分
    print(*digits_from_low(n))        # print 的默认分隔符正好是题面要求的单个空格


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-05 00:40
 * update_at: 2026-10-05 00:40
 */
#include <iostream>
using namespace std;

typedef long long ll;

ll n;
int digit[12]; // 低位在前存放各位数字
int cnt;       // n 的位数

// 反复取 n % 10 得到最低位,再用 n / 10 把最低位去掉,直到 n 变为 0
void digits_from_low() {
    while (n) {
        digit[++cnt] = n % 10;
        n /= 10;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    digits_from_low();

    for (int i = 1; i <= cnt; ++i) {
        if (i > 1) cout << ' ';
        cout << digit[i];
    }
    cout << '\n';
    return 0;
}