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觉得很多,自己很厉害吗
0offer是寒冬太冷还...
点赞 评论 收藏
分享
10-13 13:49
南京大学 财务
饿魔:笑死我了,你简直是个天才
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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