用c++实现分数(fraction)类

news2024/9/23 22:08:03

这个想法已经有3周,于是今天将它实现了。

Step 1基础:

我们需要定义一个class——fraction,全部属性定义为public

class fraction{
public:

};

现在,让我们添加2个元素,分子和分母——fz和fw

Step 1.1添加分子分母:

class fraction{
public:
	int fz,fw;
};

Step 2重载运算符:

首先是约分

static fraction teasy(fraction ans){
	int yf=__gcd(ans.fz,ans.fw);
	ans.fz/=yf;
	ans.fw/=yf;
	return ans;
}

接着是lcm(最小公倍数)

static int lcm(int x,int y){
	return x*y/__gcd(x,y);
}

其次是加减乘除,很简单


friend fraction operator+(fraction x,fraction y){
	fraction ans;
	ans.fz=x.fz*y.fw+y.fz*x.fw;
	ans.fw=x.fw*y.fw;
	return teasy(ans);
}
friend fraction operator-(fraction x,fraction y){
	fraction ans;
	ans.fz=x.fz*y.fw-y.fz*x.fw;
	ans.fw=x.fw*y.fw;
	return teasy(ans);
}
friend fraction operator*(fraction x,fraction y){
	fraction ans;
	ans.fz=x.fz*y.fz;
	ans.fw=x.fw*y.fw;
	return teasy(ans);
}
friend fraction operator/(fraction x,fraction y){
	fraction ans;
	swap(y.fz,y.fw);	
    ans.fz=x.fz*y.fz;
	ans.fw=x.fw*y.fw;
		return teasy(ans);
}
friend bool operator>(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz>y.fz)return 1;
	else return 0;
}

当然,逻辑运算符也不能忘记

friend bool operator>(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz>y.fz)return 1;
	else return 0;
}
friend bool operator==(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz==y.fz)return 1;
	else return 0;
}
friend bool operator<(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz<y.fz)return 1;
	else return 0;
}
friend bool operator<=(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz<=y.fz)return 1;
	else return 0;
}
friend bool operator>=(fraction x,fraction y){
	int thard=lcm(x.fw,y.fw);
	x.fz=x.fz*thard/x.fw;
	y.fz=y.fz*thard/y.fw;
	if(x.fz>=y.fz)return 1;
	else return 0;
}

输出函数


static void print(fraction x){
	if(x.fz==0)cout<<"0\n";
	else if(x.fw==1)cout<<x.fz<<"\n";
	else cout<<x.fz<<"/"<<x.fw<<"\n"; 
}

n次方函数

static fraction fipow(fraction x,int y){
	fraction ans=x;
	for(int i=0;i<y-1;i++)ans=ans*x;
	return teasy(ans);
}

绝对值

static fraction frabs(fraction x){
	if(x.fz*x.fw<1){
		x.fz=abs(x.fz);
		x.fw=abs(x.fw);
	}
	return x;
}

完整code:

class fraction{
public:
	int fz,fw;
	static fraction teasy(fraction ans){
		int yf=__gcd(ans.fz,ans.fw);
		ans.fz/=yf;
		ans.fw/=yf;
		return ans;
	}
	static int lcm(int x,int y){
		return x*y/__gcd(x,y);
	}
	friend fraction operator+(fraction x,fraction y){
		fraction ans;
		ans.fz=x.fz*y.fw+y.fz*x.fw;
		ans.fw=x.fw*y.fw;
		return teasy(ans);
	}
	friend fraction operator-(fraction x,fraction y){
		fraction ans;
		ans.fz=x.fz*y.fw-y.fz*x.fw;
		ans.fw=x.fw*y.fw;
		return teasy(ans);
	}
	friend fraction operator*(fraction x,fraction y){
		fraction ans;
		ans.fz=x.fz*y.fz;
		ans.fw=x.fw*y.fw;
		return teasy(ans);
	}
	friend fraction operator/(fraction x,fraction y){
		fraction ans;
		swap(y.fz,y.fw);
		ans.fz=x.fz*y.fz;
		ans.fw=x.fw*y.fw;
		return teasy(ans);
	}
	friend bool operator>(fraction x,fraction y){
		int thard=lcm(x.fw,y.fw);
		x.fz=x.fz*thard/x.fw;
		y.fz=y.fz*thard/y.fw;
		if(x.fz>y.fz)return 1;
		else return 0;
	}
	friend bool operator==(fraction x,fraction y){
		int thard=lcm(x.fw,y.fw);
		x.fz=x.fz*thard/x.fw;
		y.fz=y.fz*thard/y.fw;
		if(x.fz==y.fz)return 1;
		else return 0;
	}
	friend bool operator<(fraction x,fraction y){
		int thard=lcm(x.fw,y.fw);
		x.fz=x.fz*thard/x.fw;
		y.fz=y.fz*thard/y.fw;
		if(x.fz<y.fz)return 1;
		else return 0;
	}
	friend bool operator<=(fraction x,fraction y){
		int thard=lcm(x.fw,y.fw);
		x.fz=x.fz*thard/x.fw;
		y.fz=y.fz*thard/y.fw;
		if(x.fz<=y.fz)return 1;
		else return 0;
	}
	friend bool operator>=(fraction x,fraction y){
		int thard=lcm(x.fw,y.fw);
		x.fz=x.fz*thard/x.fw;
		y.fz=y.fz*thard/y.fw;
		if(x.fz>=y.fz)return 1;
		else return 0;
	}
	static fraction fipow(fraction x,int y){
		fraction ans=x;
		for(int i=0;i<y-1;i++)ans=ans*x;
		return teasy(ans);
	} 
	static fraction ffpow(fraction x,fraction y){
	
	}
	static void print(fraction x){
		if(x.fz==0)cout<<"0\n";
		else if(x.fw==1)cout<<x.fz<<"\n";
		else cout<<x.fz<<"/"<<x.fw<<"\n"; 
	}
	static fraction frabs(fraction x){
		if(x.fz*x.fw<1){
			x.fz=abs(x.fz);
			x.fw=abs(x.fw);
		}
		return x;
	}
};

测试:

test1:

test2:

test3:

test4:

总结:

代码难度不大,码量不大,作用不大(3“不大”代码)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT| “无法粘贴窗口部件”错误以及customplot

“无法粘贴窗口部件”错误以及customplot “无法粘贴窗口部件”错误customplot下载添加到项目中使用QCustomPlot常用的代码 “无法粘贴窗口部件”错误 情景&#xff1a;使用QT设计界面&#xff0c;很多部分比较类似&#xff0c;可以复制另一个界面的ui&#xff0c;但是粘粘的时…

c++278函数指针

#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<string.h> #include<stdio.h>//数组类型基本语法知识梳理 //定义一个数组类型 //int a[10];//定义一个指针数组类型//定义一个指向数组类型的指针 数组类型的指针void main() {int a[10];//a代…

“AI+Security”系列第3期(二):AI赋能自动化渗透测试

近日&#xff0c;“AI Security” 系列第 3 期&#xff1a;AI 安全智能体&#xff0c;重塑安全团队工作范式技术沙龙活动正式举行。该活动由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办&#xff0c;吸引了线上与线下千余名观众参与。 在…

数据结构基础详解:拓扑排序和关键路径_AOE网的详细画法

文章目录 1.有向无环图&#xff08;前置知识&#xff09;2. 拓扑排序2.1 AOV网2.2 排序序列 3.关键路径3.1 AOE网3.2 关键活动3.2.1 事件v~k~的最早发生时间v~e~(k)3.2.2 活动a~I~的最迟开始时间l(i)3.2.3 事件v~k~的最迟发生时间v~l~(k)3.2.4 活动a~I~的最早开始时间e(i)3.2.5…

插件MyBatis X

文章目录 插件插件MyBatis X 插件 插件MyBatis X 安装完重启idea 蓝色 sql映射文件 红色 mapper接口 点击对应的鸟&#xff0c;sql映射文件和对应mapper接口就能相互跳转

Python应用指南:利用高德地图API获取POI数据

随着地理信息系统&#xff08;GIS&#xff09;技术的发展&#xff0c;地理位置数据在城市规划、商业分析、旅游推荐等多个领域发挥着越来越重要的作用。POI&#xff08;Point of Interest&#xff0c;兴趣点&#xff09;数据作为地理信息的重要组成部分&#xff0c;提供了丰富的…

线程对象的生命周期、线程等待和分离

线程对象的生命周期、线程等待和分离 #include <iostream> #include<thread> using namespace std;bool is_exit false;//用于判断主线程是否退出 void ThreadMain() {cout << "begin sub thread main ID: " << this_thread::get_id() &l…

数据结构(Day19)

一、学习内容 单链表 头删 int front_dele(Plink L) {if(LNULL||L->len0){printf("头删失败\n");return -1;}Plink Q L->next;//保留要删除的1号节点L->next L->next->next;L->len--;free(Q);//释放空间QNULL;return 0; }尾删 int rear_dele(Pli…

JavaWeb - 5 - 前端工程化 Element

一.前后端分离开发 前后端混合开发 缺点&#xff1a;沟通成本高&#xff0c;分工不明确&#xff0c;不便管理&#xff0c;不便维护拓展 前后端分离开发 当前最为主流的开发模式&#xff1a;前后端分离 前后端分离开发中很重要的是API接口文档&#xff08;如&#xff1a;YApi&…

AH2212-12V转4.2V充电芯片

AH2212——12V转4.2V充电芯片&#xff0c;峰值2A输出编程电流&#xff0c;实现精准同步开关降压锂电池充电 随着科技的不断发展&#xff0c;移动电源、智能穿戴、电动工具等设备的应用越来越广泛&#xff0c;对电池充电芯片的需求也日益增大。本文将为您介绍一款高性能的充电芯…

通过iFIX在ARMxy边缘计算网关上实现维护管理

在当今快速发展的工业环境中&#xff0c;维护管理的有效性直接影响到生产效率和设备可靠性。随着物联网和边缘计算的兴起&#xff0c;传统的维护方式正在被更智能和高效的解决方案所替代。ARMxy系列的BL340控制器&#xff0c;凭借其灵活的IO配置和强大的处理能力&#xff0c;成…

linux使用docker安装运行kibana报错“Kibana server is not ready yet“的解决办法

首先docker log <container-id>查看日志是什么问题(以下是我的最后一条日志报错): {"type":"log","timestamp":"2024-09-23T12:27:0700:00","tags":["error","elasticsearch-service"],"pi…

【中关村在线-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

基于单片机的无线宠物自动喂食系统设计

本设计研究了一种无线宠物自动喂食器&#xff0c;其功能是先将宠物饲料放入其中&#xff0c;通过设定喂食时间点&#xff0c;当到达这一时间点后&#xff0c;系统开始播报语音同时控制步进电机转动&#xff0c;自动进行喂食。本设计主要研究怎么设定时间并进行投喂&#xff0c;…

(学习记录)使用 STM32CubeMX——GPIO引脚输出配置

学习总结&#xff1a;&#xff08;学习总结&#xff09;STM32CubeMX HAL库 学习笔记撰写心得https://blog.csdn.net/Wang2869902214/article/details/142435481 STM32F103C8T6的GPIO引脚输出配置 时钟配置 &#xff08;学习记录&#xff09;使用 STM32CubeMX——配置时钟&…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

创新学生宿舍管理:Spring Boot框架实践

第2章 开发环境与技术 学生宿舍管理系统的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对学生宿舍管理系统用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&#xff0c;没…

pdf怎么删除空白页?分享5个删除pdf页面的方法(批量删除法)

pdf文件因其跨平台、格式稳定的特性&#xff0c;已成为我们工作、学习中不可或缺的一部分。那么在编辑pdf格式文档中&#xff0c;总会遇到一些难题&#xff0c;比如说pdf怎么删除空白页 pdf与word一样&#xff0c;具备了多种编辑功能&#xff0c;只不过是word倾向于编辑&#x…

zabbix入门单机部署

zabbix官网 1进入官网后选择右上角Download 选择你要的版本以及需要的组件&#xff0c;网页下方会自动生成需要操作的步骤 &#xff0c;跟着步骤一步一步安装即可&#xff1a; 这里跟着官网步骤一步步走下去就可以了 但是需要注意的是安装 yum install centos-release-scl源…

活动报名| 探索存内计算的未来,共话AGI时代

活动日期&#xff1a;2024年09月28日 下午一点到6点 地点&#xff1a;杭州技术转移中心 三楼路演厅 议程亮点&#xff1a; 存内计算技术架构以及最新趋势AGI开源项目交流存内计算实操上板体验 存内计算 ——突破物理极限的下一代算力技术 直接消除“存”“算”界限&…