C++实现分数类

 利用符号位对分数进行简化

#include<iostream>
#include<cstdlib>
using namespace std;

class Rational{
	private:
		int x,y;
	public:
		void simplify();
		Rational(int a=0,int b=0):x(a),y(b)
		{
			simplify();
		}
		friend Rational Add(Rational &r1,Rational &r2);
		friend Rational Subtract(Rational &r1,Rational &r2);
		friend Rational Multiply(Rational &r1,Rational &r2);
		friend Rational Divide(Rational &r1,Rational &r2);
		void print() {cout<<x<<"/"<<y<<endl;}
}; 

int gcd(int x, int y) {return x % y == 0 ? y : gcd(y, x % y);}

int lcm(int x, int y) {return x / gcd(x, y) * y;}

Rational Add(Rational &r1,Rational &r2)
{
	Rational r3;
	int tempVal = lcm(r1.y, r2.y);
	r1.x *= tempVal / r1.y;
	r2.x *= tempVal / r2.y;
	r1.y = r2.y = tempVal;
	r3.x=r1.x+r2.x;
	r3.y=tempVal;
	r1.simplify();
	r2.simplify();
	r3.simplify();
	return r3;
}

Rational Subtract(Rational &r1,Rational &r2)
{
	Rational r3;
	int tempVal = lcm(r1.y, r2.y);
	r1.x *= tempVal / r1.y;
	r2.x *= tempVal / r2.y;
	r1.y = r2.y = tempVal;
	r3.x=r1.x-r2.x;
	r3.y=tempVal;
	r1.simplify();
	r2.simplify();
	r3.simplify();
	return r3;
}

Rational Multiply(Rational &r1,Rational &r2)
{
	Rational r3;
	r3.x=r1.x*r2.x;
	r3.y=r1.y*r2.y;
	r3.simplify();
	return r3;
}

Rational Divide(Rational &r1,Rational &r2)
{
	Rational r3;
	r3.x=r1.x*r2.y;
	r3.y=r1.y*r2.x;
	r3.simplify();
	return r3;
}

void Rational::simplify()
{
	int m,n,r,s=1;
	if(x!=0&&y!=0){
		if(x<0) {s*=-1; x=-x;}
		if(y<0) {s*=-1; y=-y;}
		m=x;n=y;
		int tempVal = gcd(x, y);
		x /= tempVal;
		y /= tempVal;
	}
	else x=0,y=1;
}

int main()
{
	Rational r1(1,3),r2(7,8),r3;
	r1.print();
	r2.print();
	r3=Add(r1,r2);
	cout<<"1/3 + 7/8=";r3.print();
	r3=Subtract(r1,r2);
	cout<<"1/3 - 7/8=";r3.print();
	r3=Multiply(r1,r2);
	cout<<"1/3 * 7/8=";r3.print();
	r3=Divide(r1,r2);
	cout<<"1/3 / 7/8=";r3.print();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值