c++ 简单分数实现

结构体实现,仅有一些简单功能。

struct frac{
	int m,z;
	void clear(){m=0,z=0;}
	friend frac operator+(frac a,frac b){
		if(!a.m) return b;if(!b.m) return a;
		frac res;
		int l=a.m*b.m/gcd(a.m,b.m);res.m=l,res.z=a.z*(l/a.m)+b.z*(l/b.m);
		int g=gcd(res.m,res.z);res.m/=g,res.z/=g;
		return res;
	}
	friend frac operator-(frac a,frac b){
		if(!a.m) return b;if(!b.m) return a;
		frac res;
		int l=a.m*b.m/gcd(a.m,b.m);res.m=l,res.z=a.z*(l/a.m)-b.z*(l/b.m);
		int g=gcd(res.m,res.z);res.m/=g,res.z/=g;
		return res;
	}
	friend frac operator*(frac a,frac b){
		if(!a.m||!b.m) return {0,0};
		frac res;
		res.m=a.m*b.m,res.z=a.z*b.z;
		int g=gcd(res.m,res.z);res.m/=g,res.z/=g;
		return res;
	}
	friend frac operator/(frac a,frac b){
		if(!a.m||!b.m) return {0,0};
		frac res,_b={b.z,b.m};
		res.m=a.m*_b.m,res.z=a.z*_b.z;
		int g=gcd(res.m,res.z);res.m/=g,res.z/=g;
		return res;
	}
	friend bool operator<(frac a,frac b){
		frac res=a-b;
		if(res.m*res.z<0) return true;
		return false;
	}
	friend bool operator>(frac a,frac b){
		frac res=a-b;
		if(res.m*res.z<0) return false;
		return true;
	}
	friend bool operator==(frac a,frac b){
		frac res=a-b;
		return res.z==0;
	}
	friend bool operator!=(frac a,frac b){
		frac res=a-b;
		return res.z!=0;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值