UVA332 Rational Numbers from Repeating Fractions
题目描述
有理数是任何可以写成 $p/q$ 形式的数,其中 $p$ 和 $q$ 是整数。所有小于 1 的有理数(即 $p$ 小于 $q$ 的有理数)都可以展开成小数,但这种展开可能需要重复一些尾位数字。例如,有理数 $7/22$ 的十进制展开形式为 $.3181818\ldots$(注意 $1$ 和 $8$ 这对数字无限重复)。具有这种重复十进制展开的数字通常在重复的数字上写一个水平杠,如:$.3\overline{18}$。
如果给定一个有理分数的十进制展开式(如果有必要,还指出哪些数字是重复的),我们可以使用以下算法确定有理分数(即 $p/q$ 中 $p$ 和 $q$ 的整数值)。
假设小数点后面有 $k$ 个数字是不重复的,后面是一组必须重复的 $j$ 个数字。因此,对于 $7/22$ ,我们有 $k = 1$(对于数字 $3$)和 $j = 2$(对于数字 1 和 8)。现在,如果我们让 $X$ 是原始数字($7/22$),我们可以计算表达式的分子和分母
$$\displaystyle\frac{10^{k+j} \times X - 10^k \times X}{10^{k+j} - 10^k}$$
对于 $.3\overline{18}$,我们按如下方式得到这个分数的分子:
$$
10^3 \times .3\overline{18} - 10^1 \times .3\overline{18} = 318.\overline{18}-3.\overline{18}=15
$$
分母是 $1000 - 10$,也就是 $990$。需要注意,该表达式的分子和分母中的表达式总是产生整数值,这些值代表有理数的分子和分母。因此,$.3\overline{18}$ 是有理数 $315/990$ 的十进制展开。对该分数约分后的结果为 $7/22$。
输入格式
输入数据包含一系列测试用例,每个测试用例单独出现在一行中,以 $-1$ 结束。每个测试用例先给出一个整数 $j$,其后跟一个或多个空格,然后以 `0.ddddd` 的形式描述一个有理数(其中 `d` 表示一位十进制数字)。输入的有理数最多包含 9 位小数(也就是说,$k + j$ 的值最大为 $9$)。
输出格式
对于每个测试用例,显示用例编号(从 $1$ 开始顺序编号),并以 $p/q$ 的形式显示输入有理数转成分数的结果,输出的分数应该化为最简分数。