fork(1) download
  1. from fractions import gcd
  2. Num, Den = map(int,input().split('/'))
  3. Num, Den = Num//gcd(Num,Den), Den//(gcd(Num,Den))
  4. Balans, Digital = [Num%Den], ''
  5. index = -1
  6. Cnt = Den
  7. while Cnt % 5 == 0 or Cnt % 2 == 0:
  8. if Cnt % 5 == 0:
  9. Cnt //= 5
  10. if Cnt % 2 == 0:
  11. Cnt //= 2
  12. if Num % Den == 0:
  13. print(Num//Den)
  14. else:
  15. Whole = Num//Den
  16. Num = Num % Den
  17. while Num % Den != 0:
  18. Num *= 10
  19. tmp, tmp2 = Num % Den, Num // Den
  20. Digital += str(tmp2)
  21. if tmp in Balans:
  22. break
  23. Num = tmp
  24. if Num % Den == 0:
  25. break
  26. Balans.append(tmp)
  27. for i in range(1,len(Balans)):
  28. if tmp == Balans[i]:
  29. index = i
  30. break
  31. if Cnt == 1:
  32. print(str(Whole) + '.' + Digital)
  33. print('Длина предпериода:', len(Digital), 'Длина периода:', 0)
  34. elif Den % 2 != 0 and Den % 5 != 0:
  35. print(str(Whole) + '.' + '(' + Digital + ')')
  36. print('Длина предпериода:', 0, 'Длина периода:', len(Digital))
  37. else:
  38. print(str(Whole) + '.' + Digital[:index] + '(' + Digital[index:] + ')')
  39. print('Длина предпериода:', len(Digital[:index]), 'Длина периода:', len(Digital[index:]))
Success #stdin #stdout 0.02s 11624KB
stdin
12323/123456
stdout
0.099816(93882840850181441161223431829963711767755313634007257646448937273198548470710212545360290305857957490927941)
Длина предпериода: 6 Длина периода: 107