分数加法运算重载

相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类FS,有私有成员分子fz,分母fm。另有公有成员函数FS operator + (const FS &f)对运算符“+”进行重载,实现两个分数相加。题目首先给出一个整型数n,紧跟着2n行输入,输入形如3z4m,代表分子为3,分母为4。其中分母不为0,输入时分母可以为负数,但输出时分母必须为正数。
要求对分数进行两两求和,并化简。(备注说明:分数为0时,表示成0z1m,如果结果为负数,那么分子取负数,分母为正数)

 

 

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int gcd(int a, int b)
{
    if (a % b==0) return b;
    else return gcd(b, a % b);
}//辗转相除求公因数
class FS
{
	private:
		int fz,fm;
	public:
		friend int gcd(int a,int b);
		void set(int newfz,int newfm)
		{
			fz=newfz;fm=newfm;
		}
		
		FS operator + (const FS &f)
		{
			fz=fz*f.fm+f.fz*fm;
			fm=f.fm*fm;
			
			int t=gcd(fz,fm);
			fz=fz/t;fm=fm/t;
			
			if(fm<0){fm=-fm;fz=-fz;}
			
			FS f_new;
			f_new.set(fz,fm);
			return f_new;
		}
		
		void display()
		{
			cout<<fz<<"z"<<fm<<"m"<<endl;
		}
	
			
}; 
int main()
{
	int n;
	cin>>n;
	int i;
	for(i=1;i<=n;i++)
	{
		FS fs1,fs2,fs3;
		int z,m;
		char z1,m1;
		cin>>z>>z1>>m>>m1;
		fs1.set(z,m);
		cin>>z>>z1>>m>>m1;
		fs2.set(z,m);
		
		fs3=fs1+fs2;
		fs3.display();
	}
    return 0;
}

 

posted @ 2022-05-23 20:50  墨燃云  阅读(231)  评论(0编辑  收藏  举报