模板:分数类

本文介绍了一个分数类的C++实现,包括加、减、乘、除等运算符重载及比较操作,实现了分数的简化处理,并提供了输入输出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分数类

struct Fraction
{
	ll num,den;
	Fraction(ll n=0,ll d=1):num(n),den(d)
	{
		d=__gcd(num,den),num/=d,den/=d;
		if(den<0)num=-num,den=-den;
	}
	friend Fraction operator+(const Fraction& A,const Fraction& B)
	{
		ll d=__gcd(A.den,B.den);
		return Fraction(B.den/d*A.num+A.den/d*B.num,A.den/d*B.den);
	}
	Fraction& operator+=(const Fraction &c)
	{
		return *this=*this+c;
	}
	Fraction operator-()const
	{
		Fraction r(*this);
		return r.num=-r.num,r;
	}
	friend Fraction operator-(const Fraction &a,const Fraction &c)
	{
		return -c+a;
	}
	Fraction& operator-=(const Fraction &c)
	{
		return *this=*this-c;
	}
	friend Fraction operator*(const Fraction& A,const Fraction& B)
	{
		return Fraction(A.num*B.num,A.den*B.den);
	}
	Fraction& operator*=(const Fraction &c)
	{
		return *this=*this*c;
	}
	friend Fraction operator/(const Fraction& A,const Fraction& B)
	{
		return Fraction(A.num*B.den,A.den*B.num);
	}
	Fraction& operator/=(const Fraction &c)
	{
		return *this=*this/c;
	}
	friend Fraction operator%(const Fraction &a,const Fraction &c)
	{
		return Fraction(a.num*c.den%(c.num*a.den),a.den*c.den);
	}
	Fraction& operator%=(const Fraction &c)
	{
		return *this=*this%c;
	}
	friend bool operator==(const Fraction &a,const Fraction &b)
	{
		return a.num*b.den==a.den*b.num;
	}
	friend bool operator!=(const Fraction &a,const Fraction &b)
	{
		return !(a==b);
	}
	friend bool operator<(const Fraction &a,const Fraction &b)
	{
		return a.num*b.den<a.den*b.num;
	}
	friend bool operator>(const Fraction &a,const Fraction &b)
	{
		return b<a;
	}
	friend bool operator<=(const Fraction &a,const Fraction &b)
	{
		return !(a>b);
	}
	friend bool operator>=(const Fraction &a,const Fraction &b)
	{
		return !(a<b);
	}
	friend Fraction abs(Fraction f)
	{
		if(f.num<0)f.num=-f.num;
		return f;
	}
	friend ostream& operator<<(ostream &os,const Fraction &f)
	{
		return !f.num?os<<0:
		       f.den==1?os<<f.num:
		       os<<f.num<<'/'<<f.den;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值