Advertisement
dmitryokh

Untitled

Dec 7th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int gcd(int a, int b) {
  4. if (b == 0)
  5. return a;
  6. else
  7. return gcd (b, a % b);
  8. }
  9.  
  10. class Rational {
  11. public:
  12. int num = 0, den = 1;
  13.  
  14. Rational(int n, int d) {
  15. int gcdd = gcd(n, d);
  16. n /= gcdd;
  17. d /= gcdd;
  18. if (d < 0) {
  19. n *= -1;
  20. d *= -1;
  21. }
  22. num = n;
  23. den = d;
  24. }
  25.  
  26. int numerator() const {
  27. return num;
  28. }
  29.  
  30. int denominator() const {
  31. return den;
  32. }
  33.  
  34. Rational operator + (const Rational& r) {
  35. return Rational (num * r.den + den * r.num, den * r.den);
  36. }
  37.  
  38. Rational operator + (const int& i) {
  39. return Rational (num + den * i, den);
  40. }
  41.  
  42. Rational operator - (const Rational& r) {
  43. return Rational (num * r.den - den * r.num, den * r.den);
  44. }
  45.  
  46. Rational operator - (const int& i) {
  47. return Rational (num - den * i, den);
  48. }
  49.  
  50. Rational operator * (const Rational& r) {
  51. return Rational (num * r.num, den * r.den);
  52. }
  53.  
  54. Rational operator * (const int& i) {
  55. return Rational (num * i, den);
  56. }
  57.  
  58. Rational operator / (const Rational& r) {
  59. return Rational (num * r.den, den * r.num);
  60. }
  61.  
  62. Rational operator / (const int& i) {
  63. return Rational (num, den * i);
  64. }
  65.  
  66. Rational operator + () {
  67. return Rational (num, den);
  68. }
  69.  
  70. Rational operator - () {
  71. return Rational (-num, -den);
  72. }
  73.  
  74. Rational operator += (const Rational& r) {
  75. num = num * r.den + den * r.num;
  76. den = den * r.den;
  77. int gcdd = gcd(num, den);
  78. num /= gcdd;
  79. den /= gcdd;
  80. if (den < 0) {
  81. num *= -1;
  82. den *= -1;
  83. }
  84. return *this;
  85. }
  86.  
  87. Rational operator -= (const Rational& r) {
  88. num = num * r.den - den * r.num;
  89. den = den * r.den;
  90. int gcdd = gcd(num, den);
  91. num /= gcdd;
  92. den /= gcdd;
  93. if (den < 0) {
  94. num *= -1;
  95. den *= -1;
  96. }
  97. return *this;
  98. }
  99.  
  100. Rational operator *= (const Rational& r) {
  101. num = num * r.num;
  102. den = den * r.den;
  103. int gcdd = gcd(num, den);
  104. num /= gcdd;
  105. den /= gcdd;
  106. if (den < 0) {
  107. num *= -1;
  108. den *= -1;
  109. }
  110. return *this;
  111. }
  112.  
  113. Rational operator /= (const Rational& r) {
  114. num = num * r.den;
  115. den = den * r.num;
  116. int gcdd = gcd(num, den);
  117. num /= gcdd;
  118. den /= gcdd;
  119. if (den < 0) {
  120. num *= -1;
  121. den *= -1;
  122. }
  123. return *this;
  124. }
  125.  
  126. bool operator == (const Rational& r) {
  127. return (num == r.num && den == r.den);
  128. }
  129.  
  130. bool operator != (const Rational& r) {
  131. return (num != r.num || den != r.den);
  132. }
  133.  
  134. Rational operator++ () {
  135. num = num + den;
  136. int gcdd = gcd(num, den);
  137. num /= gcdd;
  138. den /= gcdd;
  139. if (den < 0) {
  140. num *= -1;
  141. den *= -1;
  142. }
  143. return *this;
  144. }
  145.  
  146. Rational operator-- () {
  147. num = num + den;
  148. int gcdd = gcd(num, den);
  149. num /= gcdd;
  150. den /= gcdd;
  151. if (den < 0) {
  152. num *= -1;
  153. den *= -1;
  154. }
  155. return *this;
  156. }
  157.  
  158. Rational operator++ (int) {
  159. Rational temp(*this);
  160. num = num + den;
  161. int gcdd = gcd(num, den);
  162. num /= gcdd;
  163. den /= gcdd;
  164. if (den < 0) {
  165. num *= -1;
  166. den *= -1;
  167. }
  168. return temp;
  169. }
  170.  
  171. Rational operator-- (int) {
  172. Rational temp(*this);
  173. num = num - den;
  174. int gcdd = gcd(num, den);
  175. num /= gcdd;
  176. den /= gcdd;
  177. if (den < 0) {
  178. num *= -1;
  179. den *= -1;
  180. }
  181. return temp;
  182. }
  183. };
  184.  
  185. Rational operator * (const int& i, const Rational& r) {
  186. return Rational(r.num * i, r.den);
  187. }
  188.  
  189. Rational operator / (const int& i, const Rational& r) {
  190. return Rational(r.den * i, r.num);
  191. }
  192.  
  193. Rational operator + (const int& i, const Rational& r) {
  194. return Rational(r.num + r.den * i, r.den);
  195. }
  196.  
  197. Rational operator - (const int& i, const Rational& r) {
  198. return Rational(r.den * i - r.num, r.den);
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement