Schreiben Sie ein Programm, das die lange Teilung mit ASCII-Kunst visualisiert. Die Eingabe besteht aus zwei Ganzzahlen, einem Zähler und einem Nenner, wobei das Eingabeformat Ihrer Wahl verwendet wird.
Beispiele:
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
Regeln:
- Die Verwendung des Divisionsoperators der Programmiersprache ist zulässig.
- Die Verwendung von Big Integer-Unterstützung ist ebenfalls zulässig.
- Für die Konsistenz:
- Wenn der Quotient Null ist, drucken Sie eine einzelne Null am Ende des Sprungbretts.
- Wenn der Rest Null ist, drucken Sie ihn nicht aus.
- Drucken Sie keine führenden Nullen auf Zahlen.
- Überzählige Zeilenumbrüche am Ende und Leerzeichen nach rechts sind zulässig.
- Lösung mit den wenigsten Zeichen gewinnt.
Grenzen:
- 0 <= Zähler <= 10 72 - 1
- 1 <= Nenner <= 9999999
Dies bedeutet, dass die Ausgabe niemals breiter als 80 Spalten sein wird.
Testsuite und Beispielimplementierung:
Sie können long-division.c ( gist ) verwenden, um Ihr Programm zu testen. Es ist eigentlich ein Bash-Skript mit einem darin enthaltenen C-Programm. Optimieren Sie es, um Ihr Programm in der Testsuite aufzurufen. Sehen Sie sich den C-Code unten an, um die Referenzimplementierung zu sehen. Bitte lassen Sie mich wissen, wenn es Probleme mit dem Beispielprogramm oder der Testsuite gibt.
$ ./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!
Bearbeiten: Auf Wunsch stelle ich die Eingabe und erwartete Ausgabe der Testsuite in Textdateien ( gist ). Beispielnutzung (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
Die seltsamen sed-Befehle filtern nachgestellte Zeilenumbrüche und Leerzeichen aus der Programmausgabe heraus.