Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <set>
- #include <sstream>
- using namespace std;
- int NOD(int a, int b){
- while (a > 0 && b > 0) {
- if (a > b) {
- a %= b;
- } else {
- b %= a;
- }
- }
- return (a+b);
- }
- class Rational {
- public:
- Rational() {
- chisl = 0;
- znam = 1;
- }
- Rational(const int& numerator, const int& denominator) {
- int c;
- int a = numerator;
- int b = denominator;
- bool isA, isB;
- if (a < 0 && b < 0){
- a *= -1;
- b *= -1;
- }
- else if (a < 0 && b > 0){
- a *= -1;
- isA = true;
- }
- else if (a > 0 && b < 0){
- b *= -1;
- isB = true;
- }
- if (a != 0){
- c = NOD(a, b);
- chisl = a / c;
- znam = b / c;
- } else {
- chisl = 0;
- znam = 1;
- }
- if (isA || isB){
- chisl *= -1;
- }
- }
- int Numerator() const {
- return chisl;
- }
- int Denominator() const {
- return znam;
- }
- private:
- int chisl;
- int znam;
- };
- bool operator==(const Rational& lhs, const Rational& rhs){
- if (lhs.Numerator() == rhs.Numerator()
- && lhs.Denominator() == rhs.Denominator()){
- return true;
- } else {
- return false;
- }
- }
- bool operator!=(const Rational& lhs, const Rational& rhs){
- if (lhs.Numerator() == rhs.Numerator()
- && lhs.Denominator() == rhs.Denominator()){
- return false;
- } else {
- return true;
- }
- }
- Rational operator+(const Rational& lhs, const Rational& rhs){
- int temp;
- int temp1 = lhs.Denominator();
- if (rhs.Denominator() != lhs.Denominator()){
- temp1 = rhs.Denominator() * lhs.Denominator();
- temp = lhs.Numerator() * rhs.Denominator()
- + rhs.Numerator() * lhs.Denominator();
- } else {
- temp = lhs.Numerator() + rhs.Numerator();
- }
- int c = NOD(temp, temp1);
- return Rational (temp/c, temp1/c);
- }
- Rational operator-(const Rational& lhs, const Rational& rhs){
- int temp;
- int temp1 = lhs.Denominator();
- if (rhs.Denominator() != lhs.Denominator()){
- temp1 = rhs.Denominator() * lhs.Denominator();
- temp = lhs.Numerator() * rhs.Denominator()
- - rhs.Numerator() * lhs.Denominator();
- } else {
- temp = lhs.Numerator() - rhs.Numerator();
- }
- int c = NOD(temp, temp1);
- return Rational (temp/c, temp1/c);
- }
- Rational operator*(const Rational& lhs, const Rational& rhs){
- int temp = lhs.Numerator() * rhs.Numerator();
- int temp1 = lhs.Denominator() * rhs.Denominator();
- int c = NOD(temp, temp1);
- return Rational(temp/c, temp1/c);
- }
- Rational operator/(const Rational& lhs, const Rational& rhs){
- int temp = lhs.Numerator() * rhs.Denominator();
- int temp1 = lhs.Denominator() * rhs.Numerator();
- int c = NOD(temp, temp1);
- return Rational(temp/c, temp1/c);
- }
- ostream& operator<<(ostream& stream, const Rational& lol){
- stream << lol.Numerator() << "/" << lol.Denominator();
- return stream;
- }
- istream& operator>>(istream& stream, Rational& lol){
- int a,b;
- if (stream){
- stream >> a;
- stream.ignore(1);
- stream >> b;
- stream.ignore(1);
- lol = Rational(a,b);
- }
- return stream;
- }
- bool operator<(const Rational& lhs, const Rational& rhs){
- if (lhs.Denominator() == rhs.Denominator()){
- if (lhs.Numerator() < rhs.Numerator()){
- return true;
- } else {
- return false;
- }
- }
- else {
- int a = lhs.Numerator() * rhs.Denominator();
- int b = rhs.Numerator() * lhs.Denominator();
- if (a < b){
- return true;
- } else {
- return false;
- }
- }
- }
- bool operator>(const Rational& lhs, const Rational& rhs){
- if (lhs.Denominator() == rhs.Denominator()){
- if (lhs.Numerator() < rhs.Numerator()){
- return false;
- } else {
- return true;
- }
- }
- else {
- int a = lhs.Numerator() * rhs.Denominator();
- int b = rhs.Numerator() * lhs.Denominator();
- if (a < b){
- return false;
- } else {
- return true;
- }
- }
- }
- int main() {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement