这个问题不必仅适用于终止小数-重复的小数也可以通过算法转换为分数。
您的任务是制作一个程序,该程序将重复的小数作为输入,并输出产生该小数扩展的相应分子和分母(以最低的条款)。大于1的分数应表示为不正确的分数,例如9/5
。您可以假设输入为正。
重复的小数将以以下格式给出:
5.3.87
重复第二个点之后的所有内容,如下所示:
5.3878787878787...
您的程序将输出两个代表分子和分母的整数,并用斜杠分隔(如果不输出纯文本,则为您语言的等效形式):
889/165
请注意,终止小数点在第二个点之后将没有任何内容,而没有非重复小数部分的小数点将在两个点之间没有任何内容。
测试用例
这些测试用例涵盖了所有必需的极端情况:
0..3 = 1/3
0.0.3 = 1/30
0.00.3 = 1/300
0.6875. = 11/16
1.8. = 9/5
2.. = 2/1
5..09 = 56/11
0.1.6 = 1/6
2..142857 = 15/7
0.01041.6 = 1/96
0.2.283950617 = 37/162
0.000000.1 = 1/9000000
0..9 = 1/1
0.0.9 = 1/10
0.24.9 = 1/4
如果您愿意,还可以假设没有整数部分的分数在第一个点的左侧没有任何内容。您可以使用以下可选测试用例进行测试:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
即分数必须简化。
13
代替输出13/1
吗?
1.9999...
和输出2/1
1.9999.
是19999/10000
,为了2/1
您的需要1..9
,不是吗?
9/99
?