《算法笔记》第4章 入门篇(2)---算法初步 5.3 分数的四则运算

5.3.1 分数的表示和简化:

1.分数的表示:

在这里插入图片描述

struct Fraction
{
    int up,down;
};

2.分数的化简:

在这里插入图片描述

struct Fraction
{
    int up,down;   //设置一个分数结构,分母为up,分子为down
};

Fraction reduction(Fraction result)
{
    if(result.up<0)    //如果 分子<0,则把分母,分子都设置为相反数
    {
        result.up=-result.up;
        result.down=-result.down;
    }
    
    if(result.up==0)   //如果分子为0,则把分母设置为1
    {
        result.down=1;
    }
    else  //如果正常的分数,则化简我们的分子,分母
    {
        int d=gcd(abs(result.up),abs(result.down));    //再求分子,分母的最大公约数的时候;要把分子,分母改为绝对值形式
        up=up/d;
        down=down/d;
    }
    return result;
}


3.两个分数相加:

在这里插入图片描述

struct Fraction
{
    int up,down;   //设置一个分数结构,分母为up,分子为down
};

Fraction add(Fraction result1,Fraction result2)
{
    Fraction result3;
    result3.up=result1.up*result2.down+result2.up*result1.down;
    result3.down=result1.down*result2.down;
    return reduction(result3);
}


4.两个分数相减:

struct Fraction
{
    int up,down;   //设置一个分数结构,分母为up,分子为down
};

Fraction minu(Fraction result1,Fraction result2)
{
    Fraction result3;
    result3.up=result1.up*result2.down-result2.up*result1.down;
    result3.down=result1.down*result2.down;
    return reduction(result3);
}

5.两个分数相乘:

struct Fraction
{
    int up,down;   //设置一个分数结构,分母为up,分子为down
};

Fraction multi(Fraction result1,Fraction result2)
{
    Fraction result3;
    result3.up=result1.up*result2.up;
    result3.down=result1.down*result2.down;
    return reduction(result3);
}

5.两个分数相除:

struct Fraction
{
    int up,down;   //设置一个分数结构,分母为up,分子为down
};

Fraction divide(Fraction result1,Fraction result2)
{
    Fraction result3;
    result3.up=result1.up*result2.down;
    result3.down=result1.down*result2.up;
    return reduction(result3);
}

注意事项:

如果除数为0,则直接输出Error和Inf;只有当除数不为0时,才可以用上面的方法

6.输出分数:

//现在就是输出分数,先对输入的数据进行化简,如果分母是1,表示为整数,则直接输出分子;如果分子的绝对值
//大于分母则直接写成假分数的形式,其他的情况,直接写成真分数

void showResult(Fraction r)    //输出的话,注意函数类型是void
{
    r=reduction(r);         //先对要输出的分数进行化简
    if(r.down==1)           
        printf("%11d".r.up);     //如果分母是1,则直接输出分子
    else if(abs(r.up)>r.down)      //假分数
        printf("%d %d/%d",abs(r.up)/r.down,abs(r.up)%r.down,r.down);
    else
        printf("%d/%d",r.up,r.down);     //最后直接输出真分数
}

注意:在输出分子和分母的时候,要将分子,分母设置为long long类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值