PIO15 单组_补充前导零¶
入门通过率 84.83%python3样例通过牛客 AC
讲解章节:输入输出处理
一句话
读入一个正整数,补足 9 个数位后输出。
解题思路¶
这题考什么¶
输入形态:单组数据,一行一个整数。考点同样落在输出格式上: 位数不足 9 位时在左边补零,正好 9 位时原样输出。
做法是把输入当字符串处理,压根不转成整数: 读进来是什么样,除了补零之外不做任何改动。 zfill(9) 的语义是「左侧补 0 直到总长度达到 9」, 已经够长时它什么也不做——只补不截,所以 9 位的输入会原样保留。
与其他写法相比¶
格式化 "%09d" 或 f-string 的 09d 也能得到同样结果, 但它们要先把字符串转成 int 再转回字符串,多绕一圈; 而 zfill 的名字直接说出了「zero fill」这件事,对入门读者更直白。 真正要小心的是自己写循环拼 "0":字符串不可变,每次拼接都要整体复制, 虽然本题只有 9 位无所谓,但这个习惯在长串上就是 O(n^2)。
数据规模与复杂度¶
1 <= n < 1e9,所以十进制最多 9 位,zfill(9) 永远不会发生截断。 时间和空间都是 O(1)。
坑在哪¶
- strip() 不能省。行尾残留的空白字符会被算进字符串长度, zfill 会因此少补一个零,输出变成 8 位有效数字加一个杂字符。
- zfill 对符号位有特殊处理:它会把补的零插在符号之后, "-12".zfill(5) 得到 "-0012" 而不是 "000-12"。本题 n 为正整数用不上, 但换成可能有负数的题面时,这个行为决定了要不要单独处理符号。
- 题目上界是严格小于 1e9,正好卡住 9 位; 如果换成 n <= 1e9,1000000000 有 10 位,zfill(9) 不会截断, 会输出 10 位——这时就得回头看题目到底要不要截断。
参考实现¶
| solutions/PIO15.py | |
|---|---|
[:octicons-arrow-left-16: PIO14](PIO14.md) [PIO16 :octicons-arrow-right-16:](PIO16.md)