目录
一.序言
这是一个头文件,关于分数的各种操作,里面包括结构体,函数,+-*/等运算方法。也可以自己加入关于分数的各种操作。注释把功能写得十分清楚。有什么问题欢迎在评论区提问。
二.代码
//分数应用库
#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);
}
};