📄 rational.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 + -