编写一个程序,以可视化方式用ASCII艺术进行长除法。使用您选择的输入格式,输入由两个整数组成:分子和分母。
例子:
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)测试您的程序。它实际上是一个带有C程序的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命令从程序输出中过滤出结尾的换行符和空格。
我在参考实现中发现了一个小缺陷,即在123000123000123÷123的情况下。减法线跨越空格,但它们应仅跨越被减数的可见数字的长度。现在已修复。
—
乔伊·亚当斯
我想输出是比特向讲英语的高尔夫球观众偏见:en.wikipedia.org/wiki/...
—
hallvabo
您可以只创建一个显示所有测试的预期输出并链接到该文件的文件吗?
—
mellamokb 2011年
@mellamokb:添加,谢谢!
—
乔伊·亚当斯
接受呢?这个问题已经够老了……
—
Oleh Prypin 2011年