练车加端盘子也挡不住我学习系列——分数的四则运算

分数的四则运算

分数结构

struct Fraction
{
    int up,down;//分子,分母
};

分数的化简

int gcd(int up,int down)//求最大公约数
{
    if(down==0) return up;
    else return gcd(down,up%down);
}
Fraction reduction(Fraction result)//分数的化简
{
    if(result.down<0)//分母小于0时
    {
        result.up=-result.up;
        result.down=-result.down;
    }
    if(result.up==0) result.down=1;
    else
    {
        result.up/=gcd(abs(result.up),abs(result.down));
        result.down/=gcd(abs(result.up),abs(result.down));
    }
    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)//输出函数
{
    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;
}

你可能感兴趣的:(算法学习)