c++分数头文件

目录

一.序言

二.代码


一.序言

       这是一个头文件,关于分数的各种操作,里面包括结构体,函数,+-*/等运算方法。也可以自己加入关于分数的各种操作。注释把功能写得十分清楚。有什么问题欢迎在评论区提问。

二.代码

//分数应用库
#include<bits/stdc++.h>
using namespace std;
//预备函数 
int gy(int n,int m){ //最大公因数 
	if(n==0) return m;
	if(n<m) swap(n,m);
	return gy(n%m,m);
}
int gb(int n,int m){ //最小公倍数
	return n*m/gy(n,m);
}
void hua(int &n,int &m){ //普通化简 
	int x=gy(n,m);
	n=n/x,m=m/x; 
}
void tong(int &afa,int &afb,int &bfa,int &bfb){ //通分
	int x=gb(afa,bfa);
	afb=afb*(x/afa);
	bfb=bfb*(x/bfa);
	afa=x,bfa=x;
}
//基础模块:分数
struct f{
	int fa,fb; //分母,分子
	f(){fa=0,fb=0;} //初始化 
	//基础分数工具 
	void paint(){ //输出 
		if(fb==0) cout<<0;
		else if(fa==1) cout<<fb;
		else cout<<fb<<'/'<<fa;
	}
	void scane(){ //输入 
		cin>>fa>>fb;
	}
	void fh(f &a){
		hua(a.fa,a.fb);
	}
	//运算定义	
	f operator *= (f b){ //*=定义 
		hua(fa,fb);
		hua(b.fa,b.fb);
		hua(fa,b.fb);
		hua(fb,b.fa);
		fa=fa*b.fa;
		fb=fb*b.fb; 
	}
	f operator * (f b){ //*定义
		hua(fa,fb);
		hua(b.fa,b.fb);
		hua(fa,b.fb);
		hua(fb,b.fa);
		f c;
		c.fa=fa*b.fa,c.fb=fb*b.fb;
		return c;
	}
	f operator /= (f b){ // /=定义 
		swap(b.fa,b.fb);
		hua(fa,fb);
		hua(b.fa,b.fb);
		hua(fa,b.fb);
		hua(fb,b.fa);
		fa=fa*b.fa;
		fb=fb*b.fb; 		
	}
	f operator / (f b){ // /定义 
		swap(b.fa,b.fb);
		hua(fa,fb);
		hua(b.fa,b.fb);
		hua(fa,b.fb);
		hua(fb,b.fa);
		f c; 
		c.fa=fa*b.fa;
		c.fb=fb*b.fb;
		return c; 		
	}
	f operator + (f b){ //+定义 
		tong(fa,fb,b.fa,b.fb);
		f c;
		c.fa=fa;
		c.fb=fb+b.fb;
		hua(c.fa,c.fb);
		hua(fa,fb);
		return c;
	}
	f operator += (f b){ //+=定义 
		tong(fa,fb,b.fa,b.fb);
		fa=fa;
		fb=fb+b.fb;
		hua(fa,fb);
	}	
	f operator - (f b){//-定义 
		tong(fa,fb,b.fa,b.fb);
		f c;
		c.fa=fa;
		c.fb=fb-b.fb;
		if(c.fb!=0)
		hua(c.fa,c.fb);
		hua(fa,fb);
		return c;
	}
	f operator -= (f b){//-=定义 
		tong(fa,fb,b.fa,b.fb);
		fa=fa;
		fb=fb-b.fb;
		if(fb!=0)
		hua(fa,fb);
	}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c++学生

你的鼓励是我进步的台阶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值