⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rat.h

📁 数值分析中
💻 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 + -