类内 重载运算符 分数 加减乘除

发布时间 2023-12-10 14:10:59作者: Elgina
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
class Rational{
    private :
    int numerator,denomirator;
    static int gcd(int n,int d);
    public :
    Rational(){};
    Rational(int nume,int deno) : numerator(nume),denomirator(deno){
        simply();
    }
    void simply()
    {
        int d = gcd(numerator,denomirator);
        numerator /= d;
        denomirator /= d;
        return;
    }
    int getNumerator(){   return numerator;    }
    int getDenomirator(){   return denomirator;   }
    int equal(const Rational& second);//比较分数大小
    int intValue();//返回分数的整数部分
    double doubleValue();//小数分子
    Rational(int num){// 整数转化为分数
        numerator = num;
        denomirator = 1;
    }
    Rational operator + (Rational r2);
    Rational operator - (Rational r2);
    Rational operator * (Rational r2);
    Rational operator / (Rational r2);
    friend istream& operator>>(istream& scint, Rational& r);
    friend ostream& operator<<(ostream& scout,const Rational& r);
};
int Rational::gcd(int a,int b)
{
    if(b == 0) return a;
    return gcd(b,a%b);
}
int Rational::equal(const Rational& second)
{
    int t = numerator * second.denomirator - second.numerator * denomirator;
    if(t > 0) return 1;
    if(t == 0) return 0;
    if(t < 0) return -1;
}
int Rational::intValue(){  return numerator / denomirator; }
double Rational::doubleValue(){ return (double)(numerator % denomirator)* 1.0 / (double)denomirator;   }
Rational Rational::operator +(Rational r2)
{
    int num = numerator * r2.denomirator + denomirator * r2.numerator;
    int deno = denomirator * r2.denomirator;
    return Rational(num,deno);
}
Rational Rational::operator -(Rational r2)
{
    int num = numerator * r2.denomirator - denomirator * r2.numerator;
    int deno = denomirator * r2.denomirator;
    return Rational(num,deno);
}
Rational Rational::operator *(Rational r2)
{
    int num = numerator * r2.numerator;
    int deno = denomirator * r2.denomirator;
    return Rational(num,deno);
}
Rational Rational::operator /(Rational r2)
{
    int num = numerator * r2.denomirator;
    int deno = denomirator * r2.numerator;
    return Rational(num,deno);
}
istream& operator>>(istream& scint, Rational& r)
{
    cout << "输入分数(格式:分子/分母):";
    scint >>r.numerator >> r.denomirator;
    r.simply();
    return scint;
}
ostream& operator <<(ostream& scout,const Rational& r)
{
    scout << r.numerator;
    if(r.denomirator != 1)
    scout<<"/"<<r.denomirator;
    return scout;
}
bool operator < (Rational r1,Rational r2)
{
    if(r1.equal(r2) == -1) 
    return true;
    return false;
}
bool operator > (Rational r1,Rational r2)
{
    if(r1.equal(r2) == 1) 
    return true;
    return false;
}
bool operator == (Rational r1,Rational r2)
{
    if(r1.equal(r2) == 0) 
    return true;
    return false;
}
bool operator != (Rational r1,Rational r2)
{
    if(r1.equal(r2) != 0) 
    return true;
    return false;
}
int main()
{
    Rational a,b;
    cin>>a;
    cin>>b;
    cout<<a + b<<endl;
    cout<<a - b<<endl;
    cout<<a * b<<endl;
    cout<<a / b<<endl;
    if(a < b) cout<<a<<" < "<<b<<endl;
    else if( a == b) cout<<a<<" = "<<b<<endl;
    else if(a > b) cout<<a<<" > "<<b<<endl;
    return 0;
}