1088 Rational Arithmetic (20 分)

 

2019年2月16日

11:41

#include <iostream>

#include <cstdio>

using namespace std;

typedef long long LL;

typedef struct P

{

    LL x;

    LL a, b;

}P;

P p[10], ans, t1, t2;

LL gcd(LL a, LL b)

{

    return b == 0? a : gcd(b, a % b);

}

P change(P s)

{

    P  ans = s;

    ans.x = 0;

    //cout  << endl;

    //cout << ans.x <<" " << ans.a << " " << ans.b << endl;

    if(ans.b < 0)

    {

        ans.b = -1 * ans.b;

        ans.a = -1 * ans.a;

    }

    //cout << ans.x <<" " << ans.a << " " << ans.b << endl;

    LL g = gcd(abs(ans.a), ans.b);

    ans.a /= g;

    ans.b /= g;

    ans.x = ans.a / ans.b;

    if(ans.x < 0)

       ans.a = abs(ans.a % ans.b);

    else

       ans.a = ans.a % ans.b;

    //cout << ans.x <<" " << ans.a << " " << ans.b << endl;

    return ans;

}

void show(P p)

{

    if(p.x > 0)

    {

        cout << p.x ;

        if(p.a != 0)

            cout << " " << p.a <<"/" << p.b ;

    }

    else if(p.x == 0)

    {

        if(p.a == 0)

            cout << "0";

        else if(p.a > 0)

            cout << p.a <<"/" << p.b ;

        else

            cout << "(" << p.a << "/" << p.b << ")";

    }

    else

    {

       cout << "(" << p.x ;

       if(p.a != 0)

            cout << " " << p.a <<"/" << p.b <<")" ;

       else

            cout <<")";

    }

}

int main()

{

    while(scanf("%lld/%lld%lld/%lld",&p[0].a, &p[0].b, &p[1].a, &p[1].b ) != -1)

    {

        string s1, s2;

        t1 = change(p[0]);

        t2 = change(p[1]);



        ans.a = p[0].a * p[1].b + p[0].b * p[1].a;

        ans.b = p[0].b * p[1].b;

        ans = change(ans);

        show(t1);

        cout << " + " ;

        show(t2);

        cout << " = ";

        show(ans);

        cout << endl;



        ans.a = p[0].a * p[1].b - p[0].b * p[1].a;

        ans.b = p[0].b * p[1].b;

        ans = change(ans);

        show(t1);

        cout << " - " ;

        show(t2);

        cout << " = ";

        show(ans);

        cout << endl;



        ans.a = p[0].a * p[1].a;

        ans.b = p[0].b * p[1].b;

        ans = change(ans);

        show(t1);

        cout << " * " ;

        show(t2);

        cout << " = ";

        show(ans);

        cout << endl;



        ans.a = p[0].a * p[1].b;

        ans.b = p[0].b * p[1].a;

        show(t1);

        cout << " / " ;

        show(t2);

        cout << " = ";



        if(ans.b != 0)

           ans = change(ans),show(ans);

        else

            cout <<"Inf";



        cout << endl;



    }

    return 0;

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值