1034 有理数四则运算 天勤

//1034 有理数四则运算 天勤
//https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008
#include <iostream>
using namespace std;
struct Fraction{
    long long up,down;
};
long long getGcd(long long a,long long b){
    if(b ==0) return a;
    else return getGcd(b,a%b);
}
Fraction reduction(Fraction result){
    if(result.down < 0){
        result.up = -result.up;
        result.down = -result.down;
    }
    if(result.up == 0) result.down = 1;
    else{
        long long gcd = getGcd(abs(result.up),abs(result.down));
        result.up /= gcd;
        result.down /= gcd;
    }
    return result;
}

Fraction add(Fraction a,Fraction b){
    Fraction result;
    result.up = a.up*b.down + b.up*a.down;
    result.down = a.down * b.down;
    return reduction(result);

}

Fraction minu(Fraction a,Fraction b){
    Fraction result;
    result.up = a.up*b.down - b.up*a.down;
    result.down = a.down * b.down;
    return reduction(result);

}

Fraction multi(Fraction a,Fraction b){
    Fraction result;
    result.up = a.up*b.up;
    result.down = a.down * b.down;
    return reduction(result);

}

//除法不用考虑除数为0吗?-->在main中处理了
Fraction divide(Fraction a,Fraction b){
    Fraction result;
    result.up = a.up * b.down;
    result.down = a.down*b.up;
    return reduction(result);
}

void showResult(Fraction r){
    r = reduction(r);
    if(r.up < 0) printf("(");
    if(r.down == 1) printf("%lld",r.up);
    else if(abs(r.up) > r.down){
        printf("%lld %lld/%lld",r.up/r.down,abs(r.up) % r.down,r.down);
    }else printf("%lld/%lld",r.up,r.down);
    if(r.up <0) printf(")");
}
int main(){
    Fraction a,b;
    scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);
    showResult(a);
    printf(" + ");
    showResult(b);
    printf(" = ");
    showResult(add(a,b));
    printf("\n");

    showResult(a);
    printf(" - ");
    showResult(b);
    printf(" = ");
    showResult(minu(a,b));
    printf("\n");

    showResult(a);
    printf(" * ");
    showResult(b);
    printf(" = ");
    showResult(multi(a,b));
    printf("\n");

    showResult(a);
    printf(" / ");
    showResult(b);
    printf(" = ");
    if(b.up == 0) printf("Inf");
    else{
        showResult(divide(a,b));
    }
    printf("\n");

    return 0;
}

全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务