[工程师死绝的世界C3001]荒れ果てたショップ 翻译及题解
荒废的商店
Translation by KSkun
原题:問題「荒れ果てたショップ」 | エンジニアが死滅シタ世界 〜アンドロイドとふたりぼっちで生きろ〜
问题描述
你正在整理商店管理系统的文件。
每个文件有编号与之对应,为了让文件的编号看起来比较一致,比较短的数字需要在左边补0至长度相同。
例如,编号的长度为3时,0应该补成000,而4应该补成004,13补成013,144不需要补0因此就是144,诸如此类。
给你三个整数N、A和B。
你需要将区间[A, B]中的整数补0至长度都为N,然后输出他们。
例如,样例1可以表示为下图。
在这个样例中,你需要将9、10和11三个数字补成长度为3的统一形式。
- 9是一个一位数,应该在左边补上2个0,这样才能成为长度为3的数字。
- 10和11是两位数,应该在左边补上1个0,形成长度为3的数字。
输入格式
N A B
- 整数N表示补成的数字的长度,A和B表示要补的数字的区间。
- 在输入的最后,包含一个换行符。
输出格式
将区间[A, B]中的每一个整数i补成长度为N的形式并分别输出他们。
输出的最后应该包含一个换行符。
条件
- 1 ≦ N ≦ 9
- 0 ≦ A ≦ B ≦ 5000
- B的数字位数 ≦ N
输入输出样例
输入输出样例1
输入:
3 9 11
输出:
009
010
011
输入输出样例2
输入:
2 0 3
输出:
00
01
02
03
题解
// Code by KSkun, 2019/1
#include <cstdio>
#include <cctype>
#include <algorithm>
typedef long long LL;
inline char fgc() {
static char buf[100000], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
? EOF : *p1++;
}
inline LL readint() {
LL res = 0, neg = 1; char c = fgc();
for(; !isdigit(c); c = fgc()) if(c == '-') neg = -1;
for(; isdigit(c); c = fgc()) res = res * 10 + c - '0';
return res * neg;
}
inline char readsingle() {
char c;
while(!isgraph(c = fgc())) {}
return c;
}
int n, a, b;
char fmt[10];
int main() {
n = readint(); a = readint(); b = readint();
sprintf(fmt, "%%0%dd\n", n);
for(int i = a; i <= b; i++) {
printf(fmt, i);
}
return 0;
}