分数加法运算重载

相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类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 @   墨燃云  阅读(237)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示