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

📄 rational.h

📁 计算24点源程序
💻 H
字号:

// 作者:周星星

#include <iostream.h>

//typedef __int64 INTYPE;
typedef long INTYPE;

class CRational
{
public:
	CRational(INTYPE numerator=0,INTYPE demoninator=1) throw();
	CRational(const CRational& rhs);
	CRational& operator= (const CRational& rhs);
	void Simple(void);
	INTYPE GetNumerator() const;
	INTYPE GetDemoninator() const;
	void SetNumerator(INTYPE dw);
	void SetDemoninator(INTYPE dw);
private:
	INTYPE m_Numerator;
	INTYPE m_Demoninator;

	friend const CRational operator+ (const CRational& lhs,const CRational& rhs);
	friend const CRational operator- (const CRational& lhs,const CRational& rhs);
	friend const CRational operator* (const CRational& lhs,const CRational& rhs);
	friend const CRational operator/ (const CRational& lhs,const CRational& rhs) throw();
	friend bool operator== (const CRational& lhs,const CRational& rhs);
	friend bool operator!= (const CRational& lhs,const CRational& rhs);
	friend ostream& operator<< (ostream& s,const CRational& r);
	friend istream& operator>> (istream& s,CRational& r);
};

CRational::CRational(INTYPE numerator,INTYPE demoninator):m_Numerator(numerator),m_Demoninator(demoninator)
{
	if(demoninator==0) throw("Error:Denoninator is zero!");
}
CRational::CRational(const CRational& rhs)
{
	m_Numerator=rhs.m_Numerator;
	m_Demoninator=rhs.m_Demoninator;
}
CRational& CRational::operator= (const CRational& rhs)
{
	m_Numerator=rhs.m_Numerator;
	m_Demoninator=rhs.m_Demoninator;
	return *this;
}
void CRational::Simple(void)
{
	if(m_Demoninator==1) return;
	if(m_Numerator==0)
	{
		m_Demoninator=1;
		return;
	}
	if(m_Demoninator<0)
	{
		m_Numerator=-m_Numerator;
		m_Demoninator=-m_Demoninator;
	}
	INTYPE a=m_Numerator>0?m_Numerator:-m_Numerator,b=m_Demoninator;
	for(;a!=b;)a>b?(a-=b):(b-=a);
	m_Numerator/=a;
	m_Demoninator/=a;
	return;
}
inline INTYPE CRational::GetNumerator() const
{	
	return m_Numerator;
}
inline INTYPE CRational::GetDemoninator() const
{	
	return m_Demoninator;
}
inline void CRational::SetNumerator(INTYPE dw)
{
	m_Numerator=dw;
}
inline void CRational::SetDemoninator(INTYPE dw)
{
	m_Demoninator=dw;
}
const CRational operator+ (const CRational& lhs,const CRational& rhs)
{
	CRational tmp(lhs.m_Numerator*rhs.m_Demoninator+lhs.m_Demoninator*rhs.m_Numerator,lhs.m_Demoninator*rhs.m_Demoninator);
	return tmp;
}
const CRational operator- (const CRational& lhs,const CRational& rhs)
{
	CRational tmp(lhs.m_Numerator*rhs.m_Demoninator-lhs.m_Demoninator*rhs.m_Numerator,lhs.m_Demoninator*rhs.m_Demoninator);
	return tmp;
}
const CRational operator* (const CRational& lhs,const CRational& rhs)
{
	CRational tmp(lhs.m_Numerator*rhs.m_Numerator,lhs.m_Demoninator*rhs.m_Demoninator);
	return tmp;
}
const CRational operator/ (const CRational& lhs,const CRational& rhs)
{
	if(rhs.GetNumerator()==0) throw("Error:Divide by zero!");

	CRational tmp(lhs.m_Numerator*rhs.m_Demoninator,lhs.m_Demoninator*rhs.m_Numerator);
	return tmp;
}
bool operator== (const CRational& lhs,const CRational& rhs)
{
	return lhs.m_Numerator*rhs.m_Demoninator==lhs.m_Demoninator*rhs.m_Numerator;
}
bool operator!= (const CRational& lhs,const CRational& rhs)
{
	return lhs.m_Numerator*rhs.m_Demoninator!=lhs.m_Demoninator*rhs.m_Numerator;
}
ostream& operator<< (ostream& s,const CRational& r)
{
	s<<r.m_Numerator<<'/'<<r.m_Demoninator;
	return s;
}
istream& operator>> (istream& s,CRational& r)
{
	INTYPE dw;
	s>>dw;
	r.SetNumerator(dw);
	r.SetDemoninator(1);
	return s;
}

⌨️ 快捷键说明

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