Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Repeating Decimals by Rounin
def trimnumber(number):
for split in range(0, len(number)-1):
for end in range(split+1, len(number)):
part1 = number[0:split]
part2 = number[split:end]
trimmed = ""
while len(part1)+len(trimmed) < len(number):
trimmed += part2
minLength = min(len(part1)+len(trimmed), len(number))
if (part1 + trimmed)[0:minLength] == number[0:minLength]:
if len(part1) == len(number):
return part1+part2
else:
return part1+"("+part2+")"
return number
def myDivide(numerator, denominator):
out = ""
while len(out) < 200 and numerator != 0:
out += str(numerator // denominator)
if len(out) == 1:
out += "."
numerator = numerator % denominator
numerator *= 10
return out
def convert(numerator, denominator):
integer_part = numerator // denominator
fractional_part = str(myDivide(numerator%denominator, denominator))[2:]
repeating_part = ""+fractional_part
if len(repeating_part) >= len(str(1.0/3.0)) - 2:
repeating_part = repeating_part[0:len(repeating_part)-1]
repeating_part = trimnumber(repeating_part)
if repeating_part == "0":
repeating_part = ""
return str(integer_part) + "." + repeating_part
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert convert(1, 3) == "0.(3)", "1/3 Classic"
assert convert(5, 3) == "1.(6)", "5/3 The same, but bigger"
assert convert(3, 8) == "0.375", "3/8 without repeating part"
assert convert(7, 11) == "0.(63)", "7/11 prime/prime"
assert convert(29, 12) == "2.41(6)", "29/12 not and repeating part"
assert convert(11, 7) == "1.(571428)", "11/7 six digits"
assert convert(0, 117) == "0.", "Zero"
Oct. 13, 2017