CodeForces 363A - Soroban

本文介绍了一款模拟日本传统算盘Soroban的程序设计思路及实现代码。该程序能够将输入的整数转换为Soroban上的珠子布局,展示数字在算盘上的表示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You know that Japan is the country with almost the largest 'electronicdevices per person' ratio. So you might be quite surprised to find out that theprimary school in Japan teaches to count using a Soroban — an abacus developed in Japan. This phenomenon has itsreasons, of course, but we are not going to speak about them. Let's have a lookat the Soroban's construction.


Soroban consists of some number of rods, each rod contains five beads.We will assume that the rods are horizontal lines. One bead on each rod (theleftmost one) is divided from the others by a bar (the reckoning bar). Thissingle bead is called go-dama and four others are ichi-damas. Each rod is responsible for representing a single digit from 0 to 9.We can obtain the value of a digit by following simple algorithm:

·        Set thevalue of a digit equal to 0.

·        If thego-dama is shifted to the right, add 5.

·        Add thenumber of ichi-damas shifted to the left.

Thus, the upper rod on the picture shows digit 0, the middle one showsdigit 2 and the lower one shows 7. We will consider the top rod to representthe last decimal digit of a number, so the picture shows number 720.

Write the program that prints the way Soroban shows the given number n.

Input

The first line contains a single integer n (0 ≤ n < 109).

Output

Print the description of the decimal digits of number n from the last one to thefirst one (as mentioned on the picture in the statement), one per line. Print the beads as large English letters 'O', rod piecesas character '-' and the reckoning bar as '|'. Print as many rods, as manydigits are in the decimal representation of number n without leading zeroes. We can assume that number 0 has no leadingzeroes.

Sample test(s)

input

2

output

O-|OO-OO

input

13

output

O-|OOO-O
O-|O-OOO

input

720

output

O-|-OOOO
O-|OO-OO
-O|OO-OO

 

解题思路:

模拟


代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

void output(int x)
{
	if (x<5)
	{
		printf("O-");
	}
	else
		printf("-O");

	printf("|");

	x %= 5;

	int i;
	for (i = 0; i<x; i++)
		printf("O");

	printf("-");

	for (i = 0; i<4 - x; i++)
		printf("O");
	printf("\n");
}

int main()
{
	int n;
	char s[15];

	while (scanf("%s", s) != EOF)
	{
		int i, len = strlen(s);
		for (i = len - 1; i >= 0; i--)
			output(s[i] - '0');
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值