其他分享
首页 > 其他分享> > 分数加法运算重载

分数加法运算重载

作者:互联网

相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类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;
}

 

标签:分数,FS,return,int,fz,加法,重载,fm
来源: https://www.cnblogs.com/iceforever7/p/16302853.html