相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类FS,有私有成员分子fz,分母fm。另有公有成员函数FS operator + (const FS &f)对运算符“+”进行重载,实现两个分数相加。题目首先给出一个整型数n,紧跟着2n行输入,输入形如3z4m,代表分子为3,分母为4。其中分母不为0,输入时分母可以为负数,但输出时分母必须为正数。 要求对分数进行两两求和,并化简。(备注说明:分数为0时,表示成0z1m,如果结果为负数,那么分子取负数,分母为正数)
示例如下:
输入:
3
4z9m
2z9m
4z5m
5z4m
2z-5m
1z-5m
输出:
2z3m
41z20m
-3z5m
#include<bits/stdc++.h>
using namespace std;
class FS{
private:
int fz;
int fm;
public:
FS(){
};
FS(int a,int b):fz(a),fm(b){
};
void get(int ,int); //用于修改fzfm的函数
void simply(int &a,int &b); //约分fzfm的函数
void display(); //结果输出函数
FS operator + (const FS &f){
//重载+运算符
int a,b;
if(fz==0||f.fz==0){
a=0;
b=0;
return FS(a,b);
}
a=(fz*f.fm+fm*f.fz);
b=fm*f.fm;
if(a==0){
b=1; //如果fz等于0那么fm要等于1不能直接输出,这题就卡在这了
}
simply(a,b);
return FS(a,b);
}
};
void FS::get(int a,int b){
fz=a;
fm=b;
}
void FS::simply