# Written by *** and Eric Martin for COMP9021
'''
Prompts the user for two strictly positive integers, numerator and denominator.
Determines whether the decimal expansion of numerator / denominator is finite or infinite.
Then computes integral_part, sigma and tau such that numerator / denominator is of the form
integral_part . sigma tau tau tau ...
where integral_part in an integer, sigma and tau are (possibly empty) strings of digits,
and sigma and tau are as short as possible.
'''
import sys
from math import gcd
try:
numerator, denominator = input('Enter two strictly positive integers: ').split()
except ValueError:
print('Incorrect input, giving up.')
sys.exit()
try:
numerator, denominator = int(numerator), int(denominator)
if numerator <= 0 or denominator <= 0:
raise ValueError
except ValueError:
print('Incorrect input, giving up.')
sys.exit()
has_finite_expansion = False
integral_part = 0
sigma = ''
tau = ''
# Replace this comment with your code
# begin
modflags = []
divflags = []
div = numerator
mod = None
start = None
while True:
t = div // denominator
mod = div % denominator
if mod in modflags:
if mod > 0:
divflags.append(t)
start = modflags.index(mod)
break
else:
modflags.append(mod)
divflags.append(t)
div = mod * 10
integral_part = divflags[0]
if start != None:
sigma = ''.join(map(str, divflags[1:start + 1]))
tau = ''.join(map(str, divflags[start + 1:]))
else:
sigma = ''.join(map(str, divflags[1:]))
has_finite_expansion = start == None
# end
if has_finite_expansion:
print(f'\n{numerator} / {denominator} has a finite expansion')
else:
print(f'\n{numerator} / {denominator} has no finite expansion')
if not tau:
if not sigma:
print(f'{numerator} / {denominator} = {integral_part}')
else:
print(f'{numerator} / {denominator} = {integral_part}.{sigma}')
else:
print(f'{numerator} / {denominator} = {integral_part}.{sigma}({tau})*')