PAT A1088 Rational Arithmetic (20)

总结:

1.这种输入输出复杂的题目如果可以一定自己写一个输入输出函数---出错肯定是因为这个函数的问题--我这次就犯了个错误,输出的时候因为一个小括号切换成了中文的小括号。。。。

代码:

#include <iostream>
#include<cstdlib>
using namespace std;
long long int gds(long long int a, long long int b){ return b == 0 ? a : gds(b, a%b); }
void print1(long long int a1, long long int b1)
{
    long long sk1 = gds(a1, b1); a1 /= sk1; b1 /= sk1;
    if (a1*b1 < 0)
    {
        a1 = abs(a1); b1 = abs(b1);
        if (a1%b1 == 0)printf("(-%lld)", a1 / b1);
        else if (a1>b1)printf("(-%lld %lld/%lld)", a1 / b1, a1%b1, b1);
        else if (a1 == b1)printf("(-1)");
        else if (a1 < b1)printf("(-%lld/%lld)",a1,b1);
    }
    else if (a1*b1 == 0)printf("0");
    else if (a1*b1>0)
    {
        a1 = abs(a1); b1 = abs(b1);
        if (a1%b1 == 0)printf("%lld",a1/b1);
        else if (a1>b1)printf("%lld %lld/%lld", a1 / b1, a1%b1, b1);
        else if (a1 == b1)printf("(1)");
        else if (a1 < b1)printf("%lld/%lld", a1, b1);
    }
}
int main()
{
    long long a1, b1, a2, b2;
    scanf_s("%lld/%lld%lld/%lld",&a1,&b1,&a2,&b2);
    //加法
    long long int sum = a1*b2+a2*b1; long long int bb = b1*b2;
    long long sk = gds(sum, bb); sum /= sk; bb /= sk;
    //cout << sum << "    " << bb << endl;                                 //
    print1(a1, b1); printf(" + "); print1(a2, b2); printf(" = "); print1(sum, bb); printf("\n");
    //减法
    long long int sum1 = a1*b2 - a2*b1; long long int bb1 = b1*b2;
    long long sk1 = gds(sum1, bb1); sum1 /= sk1; bb1 /= sk1;
    //cout << sum1 << "    " << bb1 << endl;                            //
    print1(a1, b1); printf(" - "); print1(a2, b2); printf(" = "); print1(sum1, bb1); printf("\n");
    //乘法
    long long int sum3 = a1*a2; long long int bb3 = b1*b2;
    long long sk3 = gds(sum3, bb3); sum3 /= sk3; bb3 /= sk3;
    //cout << sum3 << "    " << bb3 << endl;                            //
    print1(a1, b1); printf(" * "); print1(a2, b2); printf(" = "); print1(sum3, bb3); printf("\n");
    //除法
    long long int sum4 = a1*b2; long long int bb4 = b1*a2;
    if (bb4 == 0){ print1(a1, b1); printf(" / "); print1(a2, b2); printf(" = "); printf("Inf"); return 0; }
    long long sk4 = gds(sum4, bb4); sum4 /= sk4; bb4 /= sk4;
    //cout << sum4 << "    " << bb4 << endl;                            //
    print1(a1, b1); printf(" / "); print1(a2, b2); printf(" = "); print1(sum4, bb4);
    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值