CF363A Soroban 题解
作者:互联网
Content
给出一个数 \(n\),请你用算盘来表示 \(n\)。
这里的算盘和普通的算盘一样,只不过竖着摆放罢了。左边只有一个珠子,每个珠子表示 \(5\);右边有四个珠子,每个珠子表示 \(1\)。
请从低位到高位输出。
数据范围:\(1\leqslant n\leqslant 10^9\)。
Solution
这题不是很难,就是一道模拟题目。但是有个坑点,之后会讲。
先看一下怎么实现。我们知道,分离出每个数位的操作是这么打代码的:
while(p) {
//这里反正就是将 p % 10 存到什么东西里面去,具体情况的话要具体考虑
p /= 10;
}
我们可以发现,它正好就是从低位到高位操作的!
所以我们就可以考虑边分离数位边输出。
然后我们看如何输出每一位。
首先,如果这一位上的数 \(\geqslant 5\),那么我们就移下来左边的珠子,然后将这一位上的数减 \(5\),以备后面右边的珠子的处理。然后右边的珠子就可以直接按照这位上现在的数直接输出就好了。
现在讲坑点:不能输出多余的空格和换行!
Code
#include <cstdio>
using namespace std;
int n;
void print(int x) {
if(x >= 5) {printf("-O"); x -= 5;}
else printf("O-");
printf("|");
for(int i = 1; i <= x; ++i) printf("O");
printf("-");
for(int i = x + 1; i <= 4; ++i) printf("O");
}
int main() {
scanf("%d", &n);
int p = n;
print(p % 10);
p /= 10;
while(p) {
puts("");
print(p % 10);
p /= 10;
}
}
标签:10,CF363A,输出,int,题解,珠子,printf,Soroban,算盘 来源: https://www.cnblogs.com/Eason-AC/p/15717114.html