C++运算符重载实现分数的加减法

2023-10-28

PTA中遇到了一题分数的加减法,看了网上了一些解法以后想到了运算符重载。
对于分数的加减乘除操作,都可以通过重载运算符来简化计算,且代码较短,可读性较高,重载操作符必须传参类型为‘类’,且必须在类里面申明该重载运算符。
基本框架如下:

class A{
	int numerator;//分子
	int denominator;//分母
	A(int numerator,int denominator);
	A operator+(A rsh);//重载运算符申明
};
A A::operator+(A rsh){
	//pass
	return A;
}

对于分数,可以对分母和分子分别进行运算再将同时处以最大公约数,就可以得到最简分数的结果。

注意点:
1.初始化一个sum时不能将denominator初始化为0,这不符合实际。
2.输出时要考虑numerator=0和denominator=1的情况,不能直接输出。

#include<iostream>
#include<cmath>

class Fraction {
public:
	int fenmu;
	int fenzi;
	void simplify();
	Fraction(int x,int y);
	Fraction operator+(Fraction data);
};

Fraction::Fraction(int x, int y) {
	fenzi = x;
	fenmu = y;
}

void Fraction::simplify() {//化简分数
	int t,x=fenzi,y=fenmu;
	while (y != 0) {//求最大公约数
		t = x % y;
		x = y;
		y = t;
	}
	fenzi /= x;
	fenmu /= x;
}

Fraction Fraction::operator + (Fraction data) {//重载运算符
	Fraction sum(0,1);
	sum.fenzi = fenzi * data.fenmu + fenmu * data.fenzi;
	sum.fenmu = fenmu * data.fenmu;
	sum.simplify();
	return sum;
}

int main() {
	int num;
	Fraction sum(0, 1);
	std::cin >> num;
	for (int i = 0; i < num; i++) {
		char temp;
		int x, y;
		std::cin >> x >> temp >> y;
		Fraction rsh(x, y);
		sum = sum + rsh;
	}
	if (std::abs(sum.fenzi) < std::abs(sum.fenmu)&&sum.fenzi!=0)//分子为0时比任何数都小,所以要排除
		std::cout << sum.fenzi << '/' << sum.fenmu;
	else if (sum.fenzi % sum.fenmu == 0)
		std::cout << sum.fenzi / sum.fenmu;
	else
		std::cout <<sum.fenzi/sum.fenmu<<' ' <<sum.fenzi%sum.fenmu << '/' << sum.fenmu;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++运算符重载实现分数的加减法 的相关文章

随机推荐

  • L1-6 整除光棍 (20分)

    这里所谓的 光棍 并不是指单身汪啦 说的是全部由1组成的数字 比如1 11 111 1111等 传说任何一个光棍都能被一个不以5结尾的奇数整除 比如 111111就可以被13整除 现在 你的程序要读入一个整数x 这个整数一定是奇数并且不以5
  • 【云原生之kubernetes】kubernetes集群高级资源对象statefulesets

    云原生之kubernetes kubernetes集群高级资源对象statefulesets 一 statefulesets介绍 1 statefulesets简介 2 statefulesets特点 二 检查本地kubernetes集群状
  • STM32简介

    文章目录 STM32简介 STM32选型 STM32F1片上资源 外设 STM32系列芯片命名规则 STM32系统结构 引脚定义 启动配置 最小系统电路 STM32简介 这一节只用大概混个眼熟 不要深究 STM32选型 STM32可分为Hi
  • 一文读懂XPath基本语法_XPath语法详解_XPath教程

    因为最近在学习与整理有关python爬虫的文章 连带遇到XPath的使用 就顺便一起整理出来 XPath与自动化的关系 XPath是一门在XML文档中查找信息的语言 可用来在XML文档中对元素和属性进行遍历 XPath是用来选择 节点 的一
  • MCAL介绍及Module Plugin开发流程总结

    Mcal 微控制器抽象层位于AUTOSAR分层模型中BSW最底层 包含内部驱动 可以直接访问微控制器和片内外设 MCAL又可以分为微控制器驱动 存储器驱动 通信驱动和I O驱动四个部分 各部分又由具体的与微控制器硬件相对应的驱动模块组成 如
  • MSI cache一致性协议

    按照高速缓存的写策略的不同 有写直达和写回WB两种高速缓存 1 写直达高速缓存 一旦高速缓存中的一个字被修改 则在主存中要立即修改 2 写回高速缓存 并不是立即写回 而是当被修改的字从高速缓存中被替换或清除时 才真正修改主存 在侦听协议的设
  • Kettle——转换步骤信息统计两种实现

    Kettle 步骤数据处理数量记录获取 Kettle获取数据处理条数记录日志信息 以前的途径是配置转换的日志信息来保存到数据库中 这种方式不是很灵活 有没有一种类似步骤方式来进行获取呢 Kettle在5 0版本中提供了一个步骤 在 统计 转
  • 3d查看器无法加载三维模型_这几款倾斜实景三维裸眼3D采集软件你了解吗?

    文章转载于众智绘云 部分软件介绍由GIS前沿添加和修改 版权归原作者所有 作为国际测绘领域一项高新技术 倾斜摄影测量 ObliquePhotogrammetry 因其能快速 高效获取地面高分辨率 高重叠度及全视角的影像数据信息 近年来测绘领
  • VC++控制音量

    Visual C 开发技术大全 第26章声音与动画编程 本章讲述在VC 6 0环境下 如何使用Win32 GDI GDI DirectShow等开发接口实现声音与动画的处理 本小节为大家介绍控制音量 26 1 3 控制音量 Windows
  • XML学习之Schema学习案例

    一 Schema 约束xml文件 1 xml样式
  • Java对学生成绩排序——通过list.sort()对list进行排序

    题目 输入任意 用户 成绩 序列 可以获得成绩从高到低或从低到高的排列 相同成绩 都按先录入排列在前的规则处理 例示 jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom
  • JS页面设置

    转自 http hi baidu com rnckty item 8a234fd861f07b31e2108f37 div class Noprint div
  • 四轮转向与前轮转向二自由度车辆方程推导与时域分析

    四轮转向与前轮转向二自由度车辆方程推导与时域分析
  • 前端插件之 bootstrap-select API 介绍及使用

    1 组件开源地址以及API说明 bootstrap select bootstrap select Examples 2 使用前提 引入bootstrap select 既然是bootstrap select 组件肯定是依赖bootstra
  • 数论中的欧拉函数

    在数论中 对于一正整数 n n n 欧拉函数 n varphi n n 定义为
  • mysql 函数定义字符串_MySQL函数基础——字符串函数详解

    昨天 咱们对MySQL的数学函数进行了讲解 今天 咱们再来解析MySQL字符串函数 字符串函数主要用来处理数据库中的字符串数据 MySQL中字符串函数有 计算字符串长度函数 字符串合并函数 字符串替换函数 字符串比较函数 查找指定字符串位置
  • 【HJ46】截取字符串

    题目描述 输入一个字符串和一个整数 k 截取字符串的前k个字符并输出 本题输入含有多组数据 数据范围 字符串长度满足 1 100 k 满足 1 n 输入描述 1 输入待截取的字符串 2 输入一个正整数k 代表截取的长度 输出描述 截取后的字
  • upload-labs pass10-14

    pass 10 绕过 点空格点绕过 查看源码 这是一个后端黑名单检查 str ireplace 的作用是寻找文件名中存在的黑名单字符 上传一个php文件 查看提示 可以把PHP文件后缀名改为可以上传的文件类型 上传成功 pass 11 双写
  • Unity发布到Google Play应用上架流程

    近两年 出海潮日渐兴起 游戏 短视频 社交等各个行业都在准备走向世界 而咱们国内的Android程序员素有 折翼天使 的名号 做了多年的Android开发 却不知道怎么成为Google Play开发者 今天 我们要分享的内容是 成功注册Go
  • C++运算符重载实现分数的加减法

    PTA中遇到了一题分数的加减法 看了网上了一些解法以后想到了运算符重载 对于分数的加减乘除操作 都可以通过重载运算符来简化计算 且代码较短 可读性较高 重载操作符必须传参类型为 类 且必须在类里面申明该重载运算符 基本框架如下 class