#include <cstdio>
#include <algorithm>
using namespace std;
struct Fraction{
int up,down; //分子 分母
};
//求最大公约数
int gcd(int a,int b){
if(b==0) return a;
else return gcd(b,a%b);
}
//分数化简
Fraction reduction(Fraction result){
if(result.down<0){ //分母为负数,令分子和分母都变为相反数
result.up = -result.up;
result.down = -result.down;
}
if(result.up==0) //如果分子为0
result.down=1; //令分母等于1
else{ //如果分子不为0,进行约分,同除以最大公约数
int d = gcd(abs(result.up),abs(result.down));
result.up/=d;
result.down/=d;
}
return result;
}
//分数的加法
Fraction add(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down+f2.up*f1.down;
result.down=f1.down*f2.down;
return reduction(result);
}
//分数的减法
Fraction minu(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down-f2.up*f1.down;
result.down=f1.down*f2.down;
return reduction(result);
}
//分数的乘法
Fraction multi(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.up;
result.down=f1.down*f2.down;
return reduction(result);
}
//分数的除法
Fraction divide(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down;
result.down=f1.down*f2.up;
return reduction(result);
}
//分数的输出
void showResult(Fraction r){
r = reduction(r);
if(r.down==1) printf("%lld",r.up);
else if(abs(r.up)>abs(r.down)){
//假分数
printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);
}else{ //真分数
printf("%d/%d",r.up,r.down);
}
}
int main() {
return 0;
}
分数的四则运算
最新推荐文章于 2023-03-22 22:16:47 发布