利用结构体实现分数的加减乘除

结果化为最简形式,
分母为1,只输出分子
结构体
选择语句
函数调用


#include<bits/stdc++.h>
using namespace std;
struct fraction {//分数
    int up,down;//分子,分母
};
int gcd(int x,int y) {
//    while(y^=x^=y^=x%=y);
//    return x;
    return y?gcd(y,x%y):x;
}
fraction reduction(fraction result) {
    if(result.down<0) {
        result.up=-result.up;
        result.down=-result.down;
    }
    if(result.up==0) result.down=1;//如果分子为0,令分母为 1
    else {
        int d=gcd(abs(result.up),abs(result.down));//分子分母的最大公约数
        result.up/=d;//约去最大公约数
        result.down/=d;
    }
    return result;
}
fraction add(fraction f1,fraction f2) {//分数f1加上分数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) {//分数f1减去分数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) {// 分数f1乘以分数f2 
    fraction result;
    result.up=f1.up*f2.up;//分数积的分子 
    result.down=f1.down*f2.down;//分数积的分母 
    return reduction(result);//返回结果分数,注意化简 
}
fraction divide(fraction f1,fraction f2) {//分数f1除以分数f2
    fraction result;
    result.up=f1.up*f2.down;//分数商的分子
    result.down=f1.down*f2.up;//分数商的分母
    return reduction(result);//返回结果分数, 注意化简
}
void showresult(fraction r) {//输出分数r 
    r=reduction(r);
    if(r.down==1) cout<<r.up;//整数 
    else if(abs(r.up)>r.down) {//假分数 
        cout<<r.up/r.down<<" "<<abs(r.up)%r.down<<"/"<<r.down;
    } else cout<<r.up<<"/"<<r.down<<endl;//真分数 
}
int main() {
    fraction x,y;
    cin>>x.up>>x.down>>y.up>>y.down;
    int z;
    cout<<"相加:1,相减:2,相乘:3,相除:4"<<endl;
    cin>>z;
    if(z==1) showresult(add(x,y));
    if(z==2) showresult(minu(x,y));
    if(z==3) showresult(multi(x,y));
    if(z==4) showresult(divide(x,y));
    return 0;
}

结构体里就只能放个分子和分母了
加减乘除后的分数,根据加减乘除规则,对两个分数的分子分母分别进行交叉相乘,求最大公约数,最大公倍数之类的,实现最简分式

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632