ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分数加法运算重载

2022-05-23 21:02:23  阅读:145  来源: 互联网

标签:分数 FS return int fz 加法 重载 fm


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有