分数Frac类
Posted Frozen_Guardian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分数Frac类相关的知识,希望对你有一定的参考价值。
用于优化浮点数除法的精度问题,可以直接扔map里用
白嫖党大胜利
template <typename VAL> class Frac {
public:
VAL num,den;
Frac(){}
Frac(const VAL& x, const VAL& y = 1){
den=__gcd(x,y);
num=x/den,den=y/den;
if(den<0) num=-num,den=-den;
}
bool operator <(const Frac& rhs) const {
return num*rhs.den<rhs.num*den;
}
bool operator==(const Frac& rhs) const {
return num==rhs.num && den==rhs.den;
}
Frac operator +(const Frac& rhs) const {
return Frac(num*rhs.den+den*rhs.num,den*rhs.den);
}
Frac operator -(const Frac& rhs) const {
return Frac(num*rhs.den-den*rhs.num,den*rhs.den);
}
Frac operator *(const Frac& rhs) const {
return Frac(num*rhs.num,den*rhs.den);
}
Frac operator /(const Frac& rhs) const {
return Frac(num*rhs.den,den*rhs.num);
}
Frac operator -() const {return Frac(-num,den);}
Frac& operator +=(const Frac& rhs){return *this=*this+rhs;}
Frac& operator -=(const Frac& rhs){return *this=*this-rhs;}
Frac& operator *=(const Frac& rhs){return *this=*this*rhs;}
Frac& operator /=(const Frac& rhs){return *this=*this/rhs;}
};
using frac = Frac<LL>;
以上是关于分数Frac类的主要内容,如果未能解决你的问题,请参考以下文章