Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int gcd(long long a, long long b) {
- if (a == 0) return b;
- return gcd(b % a, a);
- }
- //создаем класс дроби
- class Fraction {
- public:
- int num, den;
- friend Fraction operator+(const Fraction& first, const Fraction& second);
- friend Fraction operator*(const Fraction& first, const Fraction& second);
- friend Fraction operator/(const Fraction& first, const Fraction& second);
- friend bool operator<(const Fraction& first, const Fraction& second);
- friend Fraction operator-(const Fraction& frac);
- Fraction(long long num, long long den) {
- if (num == 0) den = 1;
- long long g = gcd(num, den);
- num /= g;
- den /= g;
- this->num = num;
- this->den = den;
- }
- //сокращение дроби
- void contract() {
- if (num == 0) den = 1;
- long long g = gcd(num, den);
- num /= g;
- den /= g;
- }
- };
- bool operator<(const Fraction& first, const Fraction& second) {
- long long NOK = first.den * second.den / gcd(first.den, second.den);
- long long firtsNum = first.num * NOK / first.den;
- long long secondNum = second.num * NOK / second.den;
- return firtsNum < secondNum;
- }
- Fraction operator-(const Fraction& frac) {
- Fraction answer = frac;
- answer.num = -answer.num;
- return answer;
- }
- Fraction operator/(const Fraction& first, const Fraction& second) {
- Fraction answer = first;
- answer.den *= second.num;
- answer.num *= second.den;
- answer.contract();
- return answer;
- }
- Fraction operator*(const Fraction& first, const Fraction& second) {
- Fraction answer = first;
- answer.num *= second.num;
- answer.den *= second.den;
- answer.contract();
- return answer;
- }
- //сложение дробей
- Fraction operator+(const Fraction& first, const Fraction& second) {
- //поиск знаменателя результата
- long long newDen = first.den * second.den / gcd(first.den, second.den);
- //приведение первой дроби
- long long newNumFirst = first.num * newDen / first.den;
- //приведение второй дроби
- long long newNumSecond = second.num * newDen / second.den;
- //числитель результата
- long long num = newNumFirst + newNumSecond;
- //сокращение результата
- long long g = gcd(num, newDen);
- num /= g;
- newDen /= g;
- Fraction answer(num, newDen);
- return answer;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement