有理数类封装
上一版运算过程中会炸
inline int absl(int x){return x>0?x:~x+1;}
inline int min(int x,int y){return x<y?x:y;}
struct rea{
int mu,zi;
rea jian(){
int gcd=__gcd(absl(zi),absl(mu));
if(mu<0){mu=-1;zi=-1;}
if(!zi){mu=1;return this;}
if(!gcd)return this;
zi/=gcd;mu/=gcd;
return this;
}
rea(int x=0,int y=1){zi=x,mu=y;jian();}
rea dao(){return rea(mu,zi);}
rea operator+(rea a){return (rea(zia.mu+mua.zi,mua.mu)).jian();}
rea operator(rea a){
int gcd1=__gcd(zi,a.mu);
int gcd2=__gcd(a.zi,mu);
return (rea((zi/gcd1)(a.zi/gcd2),(mu/gcd2)(a.mu/gcd1))).jian();
}
rea operator/(rea a){return (thisa.dao()).jian();}
rea operator-(){return rea(-zi,mu);}
rea operator-(rea a){return this+(-a);}
bool operator<(rea a){return zia.mu<a.zimu;}
bool operator>(rea a){return !(this<a);}
bool operator==(rea a){return !((this<a)||(*this>a));}
void out(){
jian();
print(zi),putchar_unlocked('/');
print(mu);putchar_unlocked('\n');
}
};
inline rea minrea(rea x,rea y){return x<y?x:y;}
浙公网安备 33010602011771号