📄 rat.h
字号:
# include <math.h>
# include <iostream.h>
class rat{
public:
int P,Q;
rat(int d1=0,int d2=1){
P=d1;
Q=d2;
simplify(*this);
}
void display();
rat& operator=(int&);
friend bool operator>(rat&,int);
friend bool operator>(rat&,rat&);
friend bool operator>(int,rat&);
friend bool operator==(rat&,rat&);
friend bool operator==(int,rat&);
friend bool operator==(rat&,int);
friend bool operator!=(rat&,rat&);
friend bool operator!=(int,rat&);
friend bool operator!=(rat&,int);
//friend rat operator-(rat&);
friend rat operator+(rat&,rat&);
friend rat operator+(int,rat&);
friend rat operator+(rat&,int);
friend rat operator-(rat&,rat&);
friend rat operator-(rat&,int);
friend rat operator-(int, rat&);
friend rat operator*(rat&,rat&);
friend rat operator*(rat&,int);
friend rat operator*(int,rat&);
friend rat operator/(rat&,rat&);
friend rat operator/(int,rat&);
friend rat operator/(rat&,int);
friend ostream& operator<<(ostream&, rat);
friend istream& operator>>(istream&, rat&);
private:
int gcd(int ,int);
void simplify(rat&);
};
bool operator!=(rat& num1,rat& num2)
{
return !(num1==num2);
}
bool operator!=(rat& num1,int d)
{
return !(num1==d);
}
bool operator!=(int d,rat& num1)
{
return !(num1==d);
}
bool operator==(rat& num1,rat& num2)
{
if(num1.P==num2.P&&num1.Q==num2.Q) return 1;
return 0;
}
bool operator==(rat& num1,int d)
{
return (num1==rat(d,1));
}
bool operator==(int d,rat& num1)
{
return num1==d;
}
bool operator>(rat& num1,rat& num2)
{
rat result=num1-num2;
if(result.P>0) return 1;
return 0;
}
bool operator>(int d,rat& num)
{
rat result=d-num;
if(result.P>0) return 1;
return 0;
}
bool operator>(rat& num,int d)
{
rat result=num-d;
if(result.P>0) return 1;
return 0;
}
bool operator<(rat& num1,rat& num2)
{
rat result=num1-num2;
if(result.P<0) return 1;
return 0;
}
bool operator<(int d,rat& num)
{
rat result=d-num;
if(result.P<0) return 1;
return 0;
}
bool operator<(rat& num,int d)
{
rat result=num-d;
if(result.P<0) return 1;
return 0;
}
rat& rat::operator=(int& d)
{
P=d;
Q=1;
return *this;
}
/*
rat operator-(rat& num)
{
rat result(-num.P,num.Q);
return result;
}
*/
ostream& operator<<(ostream& out,rat num)
{
if(num.Q==1){
out<<num.P;
}
else out<<num.P<<'/'<<num.Q;
return out;
}
istream& operator>>(istream& in,rat& num)
{
in>>num.P;
num.Q=1;
num.simplify(num);
return in;
}
int rat::gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
void rat::simplify(rat& num)
{
int d=gcd(abs(num.P),abs(num.Q));
num.P/=d;
num.Q/=d;
if(num.P*num.Q<0){
num.P=-abs(num.P);
num.Q=abs(num.Q);
}
else{
num.P=abs(num.P);
num.Q=abs(num.Q);
}
}
void rat::display()
{
cout<<P<<"/"<<Q<<endl;
}
rat operator+(rat& num1,rat& num2)
{
int F1=num1.P*num2.Q+num1.Q*num2.P;
int F2=num1.Q*num2.Q;
rat result(F1,F2);
return result;
}
rat operator-(rat& num1,rat& num2)
{
int F1=num1.P*num2.Q-num1.Q*num2.P;
int F2=num1.Q*num2.Q;
rat result(F1,F2);
return result;
}
rat operator*(rat& num1,rat& num2)
{
rat result(num1.P*num2.P,num1.Q*num2.Q);
return result;
}
rat operator/(rat& num1,rat& num2)
{
rat result(num1.P*num2.Q,num1.Q*num2.P);
return result;
}
rat operator+(rat& num1,int num2)
{
rat result(num2,1);
return num1+result;
}
rat operator+(int num1,rat& num2)
{
return num2+num1;
}
rat operator-(int num1,rat& num2)
{
rat result(num1,1);
return result-num2;
}
rat operator-(rat& num1,int num2 )
{
rat result(num2,1);
return num1-result;
}
rat operator*(rat& num1,int num2)
{
rat result(num2,1);
return result*num1;
}
rat operator*(int num1,rat& num2)
{
return num2*num1;
}
rat operator/(rat& num1,int num2)
{
rat result(num2,1);
return num1/result;
}
rat operator/(int num1,rat& num2)
{
rat result(num1,1);
return result/num2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -