Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. int gcd(long long a, long long b) {
  2.     if (a == 0) return b;
  3.     return gcd(b % a, a);
  4. }
  5.  
  6. //создаем класс дроби
  7. class Fraction {
  8. public:
  9.     int num, den;
  10.     friend Fraction operator+(const Fraction& first, const Fraction& second);
  11.     friend Fraction operator*(const Fraction& first, const Fraction& second);
  12.     friend Fraction operator/(const Fraction& first, const Fraction& second);
  13.     friend bool operator<(const Fraction& first, const Fraction& second);
  14.  
  15.     friend Fraction operator-(const Fraction& frac);
  16.  
  17.     Fraction(long long num, long long den) {
  18.         if (num == 0) den = 1;
  19.         long long g = gcd(num, den);
  20.         num /= g;
  21.         den /= g;
  22.         this->num = num;
  23.         this->den = den;
  24.     }
  25.  
  26.     //сокращение дроби
  27.     void contract() {
  28.         if (num == 0) den = 1;
  29.         long long g = gcd(num, den);
  30.         num /= g;
  31.         den /= g;
  32.     }
  33. };
  34.  
  35. bool operator<(const Fraction& first, const Fraction& second) {
  36.     long long NOK = first.den * second.den / gcd(first.den, second.den);
  37.     long long firtsNum = first.num * NOK / first.den;
  38.     long long secondNum = second.num * NOK / second.den;
  39.     return firtsNum < secondNum;
  40. }
  41.  
  42. Fraction operator-(const Fraction& frac) {
  43.     Fraction answer = frac;
  44.     answer.num = -answer.num;
  45.     return answer;
  46. }
  47.  
  48. Fraction operator/(const Fraction& first, const Fraction& second) {
  49.     Fraction answer = first;
  50.     answer.den *= second.num;
  51.     answer.num *= second.den;
  52.     answer.contract();
  53.     return answer;
  54. }
  55.  
  56. Fraction operator*(const Fraction& first, const Fraction& second) {
  57.     Fraction answer = first;
  58.     answer.num *= second.num;
  59.     answer.den *= second.den;
  60.     answer.contract();
  61.     return answer;
  62. }
  63.  
  64. //сложение дробей
  65. Fraction operator+(const Fraction& first, const Fraction& second) {
  66.  
  67.     //поиск знаменателя результата
  68.     long long newDen = first.den * second.den / gcd(first.den, second.den);
  69.  
  70.     //приведение первой дроби
  71.     long long newNumFirst = first.num * newDen / first.den;
  72.  
  73.     //приведение второй дроби
  74.     long long newNumSecond = second.num * newDen / second.den;
  75.  
  76.     //числитель результата
  77.     long long num = newNumFirst + newNumSecond;
  78.  
  79.     //сокращение результата
  80.     long long g = gcd(num, newDen);
  81.     num /= g;
  82.     newDen /= g;
  83.     Fraction answer(num, newDen);
  84.     return answer;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement