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

📄 rational.h

📁 这是个数据结构课程设计!功能强大。不信你下载下来看一看!
💻 H
字号:
#if!defined(RATIONAL_H)
#define RATIONAL_H
#include<iostream>
#include<stdlib.h>
using namespace std;
namespace std
{
class Rational
{
	private:
		long num,den;
		void Standardize(void);
		long gcd(long m,long n)const;
	public:
		Rational(long p=0,long q=1);
		Rational(double x);
		friend istream& operator>>(istream& istr,Rational& x);
		friend ostream& operator<<(ostream& ostr,const Rational& x);
		Rational operator+(Rational& x)const;
		Rational operator-(Rational& x)const;
        Rational operator*(Rational& x)const;
        Rational operator/(Rational& x)const;
		Rational operator-(void)const;
		int operator<(Rational& x)const;
        int operator<=(Rational& x)const;
        int operator==(Rational& x)const;
        int operator!=(Rational& x)const;
        int operator>(Rational& x)const;
        int operator>=(Rational& x)const;
		operator double(void)const;
		int GetNumerator(void) const{return num;}
		int GetDenominator(void) const{return den;}
		void Reduce(void);
	};
	Rational::Rational(long p,long q):num(p),den(q)
	{
		if(den==0)
		{
			cerr<<"A Zero denominator is invalid"<<endl;
			exit(1);
		}
		Standardize();
		Reduce();
	}
	Rational::Rational(double x)
	{
		double val1,val2;
		val1=100000000L*x;
		val2=10000000L*x;
		num=long(val1-val2);
		den=90000000L;
		Reduce();
	}
	void Rational::Standardize(void)
	{
		if(den<0)
		{
			num=-num;
			den=-den;
		}
	}
	long Rational::gcd(long m,long n)const
	{
		static long x;
		if(m>n)
		{
			if(n==0) x=m;
			else gcd(n,m%n);
		}
		else
		{
			if(m==0) x=n;
			else gcd(m,n%m);
		}
		return x;
	}
	istream& operator>>(istream& istr,Rational& x)
	{
		char c;
		istr>>x.num>>c>>x.den;
		if(x.den==0)
		{
			cerr<<"A Zero denominator is invalid"<<endl;
			exit(1);
		}
		x.Standardize();
		x.Reduce();
		return istr;
	}
	ostream& operator<<(ostream& ostr,const Rational& x)
	{
		ostr<<x.num<<'/'<<x.den;
		return ostr;
	}
	Rational Rational::operator+(Rational& x)const
	{
		Rational temp=Rational(num*x.den+den*x.num,den*x.den);
		temp.Reduce();
		return temp;
	}
	Rational Rational::operator-(Rational& x)const
	{
		Rational temp=Rational(num*x.den-den*x.num,den*x.den);
		temp.Reduce();
		return temp;
	}
    Rational Rational::operator*(Rational& x)const
	{
		Rational temp=Rational(num*x.num,den*x.den);
		temp.Reduce();
		return temp;
	}
    Rational Rational::operator/(Rational& x)const
	{
		Rational temp=Rational(num*x.den,den*x.num);
		temp.Standardize();
		temp.Reduce();
		return temp;
	}
	Rational Rational::operator-(void) const
	{
		return Rational(-num,den);
	}
	int Rational::operator<(Rational& x)const
	{
		return(num*x.den<den*x.num);
	}
    int Rational::operator<=(Rational& x)const
	{
		return(num*x.den<=den*x.num);
	}
    int Rational::operator==(Rational& x)const
	{
		return(num*x.den==den*x.num);
	}
    int Rational::operator!=(Rational& x)const
	{
		return(num*x.den!=den*x.num);
	}
    int Rational::operator>(Rational& x)const
	{
		return(num*x.den>den*x.num);
	}
	int Rational::operator>=(Rational& x)const
	{
		return(num*x.den>=den*x.num);
	}
	Rational::operator double(void)const
	{
		return double(num)/den;
	}
	void Rational::Reduce(void)
	{
		long bigdivisor,tempnumerator;
		tempnumerator=(num<0) ? -num:num;
		if(num==0)
			den=1;
		else
		{
			bigdivisor=gcd(tempnumerator,den);
			if(bigdivisor>1)
			{
				num/=bigdivisor;
				den/=bigdivisor;
			}
		}
	}
	
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -