简单数学问题之分数的表示与化简

分数的化简
#include <iostream>
#include <cmath>//调用abs函数
using namespace std;
int divide(int a,int b){
    if(b==0) return a;
    else return divide(b,a%b);
}
struct fraction{
    int up;//分子
    int down;//分母
}result;
fraction reduction(fraction result){
    if(result.down<0){//1.分母为负数,只需令分子为负数即可
        result.up=-result.up;//分子变为负数
        result.down=-result.down;//分母变为正数
    }
    if(result.up==0) //2.分子为0,只需令分母为1即可
    result.down=1;
    else {
        int num=divide(abs(result.up),abs(result.down));//求公约数
        result.up/=num;//化简即约去公约数
        result.down/=num;
    }
    return result;
}
int main(){
    cin>>result.up>>result.down;
    result=reduction(result);
    cout<<result.up<<","<<result.down<<endl;
    return 0;
}
分数的加法
#include <iostream>
#include <cmath>//调用abs函数
using namespace std;
int divide(int a,int b){
    if(b==0) return a;
    else return divide(b,a%b);
}
struct fraction{
    int up;//分子
    int down;//分母
}result;
fraction reduction(fraction result){
    if(result.down<0){//1.分母为负数,只需令分子为负数即可
        result.up=-result.up;//分子变为负数
        result.down=-result.down;//分母变为正数
    }
    if(result.up==0) //2.分子为0,只需令分母为1即可
    result.down=1;
    else {
        int num=divide(abs(result.up),abs(result.down));//求公约数
        result.up/=num;//化简即约去公约数
        result.down/=num;
    }
    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);
}
int main(){
    fraction f1,f2;
    cin>>f1.up>>f1.down;
    cin>>f2.up>>f2.down;
    result=add(f1,f2);
    cout<<result.up<<","<<result.down<<endl;
    return 0;
}
分数的乘法
#include <iostream>
#include <cmath>//调用abs函数
using namespace std;
int divide(int a,int b){
    if(b==0) return a;
    else return divide(b,a%b);
}
struct fraction{
    int up;//分子
    int down;//分母
}result;
fraction reduction(fraction f){
    if(f.down<0){
        f.up=-f.up;
        f.down=-f.down;
    }
    if(f.up==0)
    f.down=1;
    else {
        int num=divide(abs(f.up),abs(f.down));
        f.up/=num;
        f.down/=num;
    }
    return f;
}
fraction multiply(fraction f1,fraction f2){
    fraction result;
    result.up=f1.up*f2.up;
    result.down=f1.down*f2.down;
    return reduction(result);
}
int main(){
    fraction f1,f2;
    cin>>f1.up>>f1.down;
    cin>>f2.up>>f2.down;
    result=multiply(f1,f2);
    cout<<result.up<<","<<result.down<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值