Advertisement
Bad_Programist

Untitled

Mar 1st, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.17 KB | None | 0 0
  1. def gcd(a, b):
  2.     while b:
  3.         a, b = b, a%b
  4.     return a
  5.  
  6. def division(a, b):
  7.     res = ''
  8.     check = a
  9.     while (check != a or res == ''):
  10.         while not a // b and a != 0:
  11.             a *= 10
  12.         res += str(a // b)
  13.         if a // 10 == a % b:
  14.             return res[:-1] + '(' + res[-1] + ')'
  15.         a %= b
  16.     return '(' + res + ')'
  17.  
  18.  
  19. class Fraction(object):
  20.    
  21.     def __init__(self, num, denum=1):
  22.         cur_gcd = gcd(abs(num), abs(denum))
  23.         self.num = abs(num) // cur_gcd
  24.         self.denum = abs(denum) // cur_gcd
  25.         if self.num / self.denum:
  26.             self.sign = num * denum // (abs(num * denum))
  27.         else:
  28.             self.sign = 1
  29.        
  30.     def __str__(self):
  31.         if self.num // self.denum:
  32.             return f'{self.sign * (self.num // self.denum)} and {self.num % self.denum} / {self.denum}'
  33.         return f'{self.sign * self.num} / {self.denum}'
  34.    
  35.     def __repr__(self):
  36.         return f'Fraction({self.num} / {self.denum})'
  37.    
  38.     def __add__(self, sec):
  39.         return Fraction(self.sign * self.num * sec.denum + self.denum * sec.sign * sec.num, self.denum * sec.denum)
  40.    
  41.     def __sub__(self, sec):
  42.         return Fraction(self.sign * self.num * sec.denum - self.denum * sec.sign * sec.num, self.denum * sec.denum)
  43.    
  44.     def __mul__(self, sec):
  45.         return Fraction(self.sign * sec.sign * self.num * sec.num, self.denum * sec.denum)
  46.    
  47.     def __truediv__(self, sec):
  48.         try:
  49.             return self * Fraction(sec.denum, sec.num)
  50.         except ZeroDivisionError:
  51.             return "You can't divide by zero"
  52.    
  53.     def __pow__(self, power):
  54.         return Fraction(self.num ** power, self.denum ** power)
  55.    
  56.     def to_float(self):
  57.         if self.num // self.denum:
  58.             res = str(self.num // self.denum)
  59.             a = self.num % self.denum
  60.             b = self.denum
  61.         else:
  62.             res = '0'
  63.             a = self.num
  64.             b = self.denum
  65.         c = division(a, b)
  66.         if c[-3:] == '(0)':
  67.             c = c[:-3]
  68.         return res + '.' + c
  69.        
  70.  
  71. n, m = input().split()
  72. a = Fraction(int(n), int(m))
  73. print(a.to_float())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement