Quick actions

cmd+k|ctrl+k

Navigation

Languages

Repetend Checking

Snippet info

Language

Python

Visibility

public

Author

yoneda

Created

2018-03-19T11:30:24Z

Updated

2019-12-12T02:37:28Z

# 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})*')

INFO