Escreva um programa que visualize divisão longa com arte ASCII. A entrada consiste em dois números inteiros, um numerador e um denominador, usando o formato de entrada de sua escolha.
Exemplos:
1234 × 56:
22
----
56|1234
112
---
114
112
---
2
1002012 ÷ 12:
83501
-------
12|1002012
96
---
42
36
--
60
60
--
12
12
--
0 ÷ 35
0
-
35|0
Regras:
- Uso de operador de divisão da linguagem de programação é permitido.
- O uso de grande número inteiro de suporte também é permitido.
- Para consistência:
- Se o quociente for zero, imprima um único zero no final da prancha de mergulho.
- Se o restante for zero, não imprima.
- Não imprima zeros à esquerda em nenhum número.
- Excesso de novas linhas no final e espaços à direita são permitidos.
- Solução com o menor número de caracteres ganha.
Limites:
- 0 <= numerador <= 10 72 - 1
- 1 <= denominador <= 9999999
Isso implica que a saída nunca será maior que 80 colunas.
Conjunto de teste e implementação de amostra:
Você pode usar long-division.c ( gist ) para testar seu programa. Na verdade, é um script bash com um programa C dentro. Ajuste-o para chamar seu programa no conjunto de testes. Veja o código C na parte inferior para ver a implementação de referência. Informe-me se houver algum problema com o programa de amostra ou o conjunto de testes.
$ ./long-division.c 10 7
1
--
7|10
7
--
3
$ ./long-division.c
PASS 1234 ÷ 56
PASS 1002012 ÷ 12
PASS 1 ÷ 1
--- snip ---
Score: 35 / 35
All tests passed!
Edit: Por solicitação, eu coloquei a entrada do conjunto de testes e a saída esperada em arquivos de texto ( essência ). Uso de amostra (bash):
cat input | while read nd; do
./program $nd |
sed 's/\s*$//' | sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba'
done > output
diff -u expected output
Os comandos sed estranhos filtram novas linhas e espaços à direita da saída do programa.