Напишите программу, которая визуализирует длинное деление с помощью ASCII art. Ввод состоит из двух целых чисел, числителя и знаменателя, используя формат ввода по вашему выбору.
Примеры:
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
Правила:
- Использование оператора деления языка программирования в это разрешено.
- Использование поддержки больших целых также допускается.
- Для согласованности:
- Если частное равно нулю, выведите один ноль в конце трамплина.
- Если остаток равен нулю, не печатайте его.
- Не печатайте начальные нули на любых числах.
- Допускаются лишние переводы строки в конце и завершающие пробелы справа.
- Решение с наименьшим количеством символов выигрывает.
Ограничения:
- 0 <= числитель <= 10 72 - 1
- 1 <= знаменатель <= 9999999
Это означает, что выходные данные никогда не будут шире, чем 80 столбцов.
Тестовый набор и пример реализации:
Вы можете использовать long- Division.c ( gist ) для проверки вашей программы. На самом деле это bash-скрипт с программой на С внутри. Настройте его, чтобы вызвать вашу программу в наборе тестов. Посмотрите на код C внизу, чтобы увидеть справочную реализацию. Пожалуйста, дайте мне знать, если есть какие-либо проблемы с примером программы или набора тестов.
$ ./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!
Редактировать: По запросу я помещаю ввод тестового набора и ожидаемый вывод в текстовые файлы ( gist ). Пример использования (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
Странные команды sed отфильтровывают завершающие символы новой строки и пробелы из вывода программы.