Advertisement
OMEGAHEAD_MonkoX

Untitled

Nov 20th, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.07 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. long long int A;
  6.  
  7. int gcd(int a, int b) {
  8. if (b == 0)
  9. return a;
  10. else
  11. return gcd(b, a % b);
  12. }
  13.  
  14. class Fraction {
  15. private:
  16. int x, y;
  17. static int q;
  18. static int q1;
  19. public:
  20. Fraction() {
  21. x = 0;
  22. y = 1;
  23. }
  24. Fraction(int _x) {
  25. x = _x;
  26. y = 1;
  27. if (q1 == y)
  28. {
  29. q += x;
  30. int z = q, z1 = q1;
  31. while (gcd(q, q1) != 1) {
  32. q = q / gcd(z, z1);
  33. q1 = q1 / gcd(z, z1);
  34. z = q;
  35. z1 = q1;
  36. }
  37. }
  38. else
  39. {
  40. q = q * y + x * q1;
  41. q1 = y * q1;
  42. int z = q, z1 = q1;
  43. while (gcd(q, q1) != 1) {
  44. q = q / gcd(z, z1);
  45. q1 = q1 / gcd(z, z1);
  46. z = q;
  47. z1 = q1;
  48. }
  49. }
  50. }
  51. Fraction(int _x, int _y) {
  52. x = _x;
  53. y = _y;
  54. if (q1 == y)
  55. {
  56. q += x;
  57. int z = q, z1 = q1;
  58. while (gcd(q, q1) != 1) {
  59. q = q / gcd(z, z1);
  60. q1 = q1 / gcd(z, z1);
  61. z = q;
  62. z1 = q1;
  63. }
  64. }
  65. else
  66. {
  67. q = q * y + x * q1;
  68. q1 = y * q1;
  69. int z = q, z1 = q1;
  70. while (gcd(q, q1) != 1) {
  71. q = q / gcd(z, z1);
  72. q1 = q1 / gcd(z, z1);
  73. z = q;
  74. z1 = q1;
  75. }
  76. }
  77. }
  78. Fraction(const Fraction& v)
  79. {
  80. x = v.x;
  81. y = v.y;
  82. if (q1 == y)
  83. {
  84. q += x;
  85. int z = q, z1 = q1;
  86. while (gcd(q, q1) != 1) {
  87. q = q / gcd(z, z1);
  88. q1 = q1 / gcd(z, z1);
  89. z = q;
  90. z1 = q1;
  91. }
  92. }
  93. else
  94. {
  95. q = q * y + x * q1;
  96. q1 = y * q1;
  97. int z = q, z1 = q1;
  98. while (gcd(q, q1) != 1) {
  99. q = q / gcd(z, z1);
  100. q1 = q1 / gcd(z, z1);
  101. z = q;
  102. z1 = q1;
  103. }
  104. }
  105.  
  106. }
  107. static Fraction getSum() {
  108. Fraction w(q, q1);
  109. return w;
  110. }
  111. friend ostream& operator <<(ostream&, const Fraction&);
  112. friend istream& operator >> (istream&, Fraction&);
  113. Fraction operator +(const Fraction);
  114. ~Fraction() {
  115. if (q1 == y)
  116. {
  117. q -= x;
  118. int z = q, z1 = q1;
  119. while (gcd(q, q1) != 1) {
  120. q = q / gcd(z, z1);
  121. q1 = q1 / gcd(z, z1);
  122. z = q;
  123. z1 = q1;
  124. }
  125. }
  126. else
  127. {
  128. q = q * y - x * q1;
  129. q1 = y * q1;
  130. int z = q, z1 = q1;
  131. while (gcd(q, q1) != 1) {
  132. q = q / gcd(z, z1);
  133. q1 = q1 / gcd(z, z1);
  134. z = q;
  135. z1 = q1;
  136. }
  137. }
  138. }
  139. };
  140.  
  141. int Fraction::q = 0;
  142. int Fraction::q1 = 1;
  143.  
  144. istream& operator >> (istream& in, Fraction& v)
  145. {
  146. int e, d;
  147. in >> e >> d;
  148. v.x = e;
  149. v.y = d;
  150. int x1 = v.x;
  151. int y1 = v.y;
  152. while (gcd(v.x, v.y) != 1) {
  153. v.x = v.x / gcd(x1, y1);
  154. v.y = v.y / gcd(x1, y1);
  155. x1 = v.x;
  156. y1 = v.y;
  157. }
  158. int g = v.x;
  159. int g1 = v.y;
  160. if (Fraction::q1 == g1)
  161. {
  162. Fraction::q += g;
  163. int z = Fraction::q, z1 = Fraction::q1;
  164. while (gcd(Fraction::q, Fraction::q1) != 1) {
  165. Fraction::q = Fraction::q / gcd(z, z1);
  166. Fraction::q1 = Fraction::q1 / gcd(z, z1);
  167. z = Fraction::q;
  168. z1 = Fraction::q1;
  169. }
  170. }
  171. else
  172. {
  173. Fraction::q = Fraction::q * g1 + g * Fraction::q1;
  174. Fraction::q1 = g1 * Fraction::q1;
  175. int z = Fraction::q, z1 = Fraction::q1;
  176. while (gcd(Fraction::q, Fraction::q1) != 1) {
  177. Fraction::q = Fraction::q / gcd(z, z1);
  178. Fraction::q1 = Fraction::q1 / gcd(z, z1);
  179. z = Fraction::q;
  180. z1 = Fraction::q1;
  181. }
  182. }
  183. return in;
  184. }
  185.  
  186. ostream& operator <<(ostream& out, const Fraction& v)
  187. {
  188.  
  189. if (v.x == 0)
  190. out << 0;
  191. else
  192. if (v.y == 1)
  193. out << v.x;
  194. else
  195. out << v.x << "/" << v.y;
  196. return out;
  197. }
  198.  
  199. Fraction Fraction::operator +(const Fraction b)
  200. {
  201. int i = b.x;
  202. int i1 = b.y;
  203. if (i1 == y)
  204. {
  205. i += x;
  206. int z = i, z1 = i1;
  207. while (gcd(i, i1) != 1) {
  208. i = i / gcd(z, z1);
  209. i1 = i1 / gcd(z, z1);
  210. z = i;
  211. z1 = i1;
  212. }
  213. }
  214. else
  215. {
  216. i = i * y + x * i1;
  217. i1 = y * i1;
  218. int z = i, z1 = i1;
  219. while (gcd(i, i1) != 1) {
  220. i = i / gcd(z, z1);
  221. i1 = i1 / gcd(z, z1);
  222. z = i;
  223. z1 = i1;
  224. }
  225. }
  226. Fraction w(i, i1);
  227. return w;
  228. }
  229.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement