about summary refs log tree commit diff
path: root/others/153x/060.py
blob: 66da821f89fc39933d0a71b8561795fb87476e4e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python3
from fractions import Fraction


def decimal(fraction):
    a, b, l2, l5 = fraction.numerator, fraction.denominator, 0, 0
    if b == 1: return '{}\n'.format(a)
    while not b % 2:
        b //= 2
        l2 += 1
    while not b % 5:
        b //= 5
        l5 += 1
    b2, b5, finited = 2 ** l2, 5 ** l5, 10 ** max(l2, l5)
    if b == 1: return '{}\n'.format(a / (b2*b5))
    finiten = a * finited // b2 // b5 // b
    finite = str(finiten / finited).rstrip('0')
    f = Fraction(a, b * b2 * b5) - Fraction(finiten, finited)
    a, b, d9 = f.numerator, f.denominator // finited, 9
    while d9 % b: d9 = d9*10 + 9
    return '{}({})\n'.format(finite, a * d9 // b)


with open('DECIMAL.INP') as fi, open('DECIMAL.OUT', 'w') as fo:
    for line in fi: fo.write(decimal(Fraction(*map(int, line.split()))))