反复用 n % 10 取出最低位,再用 n /= 10 去掉最低位,直到 n 为 0。
OJ: roj
题目 ID: 1088
难度:入门
标签:输入输出模拟python
创建: 2026-09-29 18:17
更新: 2026-10-05 00:40
题目描述
输入一个整数 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;
}