其他分享
首页 > 其他分享> > CF363A Soroban 题解

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