Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. #include <cmath>
  2. #include <iostream>
  3.  
  4. size_t maxDivisor(size_t first, size_t second) {
  5. if (second == 0) {
  6. return first;
  7. }
  8. return maxDivisor(second, first % second);
  9. }
  10.  
  11. class Rational {
  12. private:
  13. int x, y;
  14.  
  15. public:
  16. Rational(int first = 0, int second = 1): x(first), y(second) {}
  17.  
  18. int numerator() const {
  19. if (y < 0) {
  20. return -x / maxDivisor(abs(x), abs(y));
  21. }
  22. return x / maxDivisor(abs(x), abs(y));
  23. }
  24.  
  25. int denominator() const {
  26. return abs(y) / maxDivisor(abs(x), abs(y));
  27. }
  28.  
  29. Rational& operator++ () {
  30. x = x + y;
  31. return *this;
  32. }
  33.  
  34. Rational& operator-- () {
  35. x = x - y;
  36. return *this;
  37. }
  38.  
  39. Rational operator++ (int) {
  40. Rational temp(*this);
  41. x = x + y;
  42. return temp;
  43. }
  44.  
  45. Rational operator-- (int) {
  46. Rational temp(*this);
  47. x = x - y;
  48. return temp;
  49. }
  50. };
  51.  
  52. Rational operator + (const Rational& z) {
  53. return Rational(z.numerator(), z.denominator());
  54. }
  55.  
  56. Rational operator - (const Rational& z) {
  57. return Rational(-z.numerator(), z.denominator());
  58. }
  59.  
  60. Rational operator + (const Rational& first, const Rational& second) {
  61. Rational temp = Rational(
  62. first.numerator() * second.denominator() + first.denominator() * second.numerator(),
  63. first.denominator() * second.denominator());
  64. return Rational(temp.numerator(), temp.denominator());
  65. }
  66.  
  67. Rational operator - (const Rational& first, const Rational& second) {
  68. Rational temp = Rational(
  69. first.numerator() * second.denominator() - first.denominator() * second.numerator(),
  70. first.denominator() * second.denominator());
  71. return Rational(temp.numerator(), temp.denominator());
  72. }
  73.  
  74. Rational operator * (const Rational& first, const Rational& second) {
  75. Rational temp = Rational(
  76. first.numerator() * second.numerator(),
  77. first.denominator() * second.denominator());
  78. return Rational(temp.numerator(), temp.denominator());
  79. }
  80.  
  81. Rational operator / (const Rational& first, const Rational& second) {
  82. Rational temp = Rational(
  83. first.numerator() * second.denominator(),
  84. first.denominator() * second.numerator());
  85. return Rational(temp.numerator(), temp.denominator());
  86. }
  87.  
  88. bool operator == (const Rational& first, const Rational& second) {
  89. return first.numerator() == second.numerator() &&
  90. first.denominator() == second.denominator();
  91. }
  92.  
  93. bool operator != (const Rational& first, const Rational& second) {
  94. return first.numerator() != second.numerator() ||
  95. first.denominator() != second.denominator();
  96. }
  97.  
  98. Rational& operator *= (Rational& first, const Rational& second) {
  99. first = first * second;
  100. return first;
  101. }
  102.  
  103. Rational& operator += (Rational& first, const Rational& second) {
  104. first = first + second;
  105. return first;
  106. }
  107.  
  108. Rational& operator -= (Rational& first, const Rational& second) {
  109. first = first - second;
  110. return first;
  111. }
  112.  
  113. Rational& operator /= (Rational& first, const Rational& second) {
  114. first = first / second;
  115. return first;
  116. }
  117.  
  118. int main() {
  119. Rational q(0, 2);
  120. --q;
  121. std::cout << q.numerator() << " " << q.denominator() << "\n";
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement