PAT A1088 分数四则运算

发布时间:2019-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PAT A1088 分数四则运算脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

clipboard.png
和之前那题一样,只不过是四册运算:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef long long ll;
struct node{
    ll up;
    ll down;
};

int gcd(ll a,ll b){
    if(b==0)
        return a;
    return gcd(b,a%b);
}

node reflesh(node a){
    if(a.down<0){
        a.down=-a.down;
        a.up=-a.up;
    }
    if(a.up==0){
        a.down=1;
    }else{
        int d;
        if(abs(a.up)>a.down){
            d=gcd(abs(a.up),a.down);
        }else{
            d=gcd(a.down,abs(a.up));
        }
        a.up/=d;
        a.down/=d;
    }
    return a;
}

node add(node a,node b){
    node result;
    result.down=a.down*b.down;
    result.up=a.up*b.down+b.up*a.down;
    return reflesh(result);
}
node minl(node a,node b){
    node result;
    result.down=a.down*b.down;
    result.up=a.up*b.down-b.up*a.down;
    return reflesh(result);
}
node doub(node a,node b){
    node result;
    result.down=a.down*b.down;
    result.up=a.up*b.up;
    return reflesh(result);
}
node mult(node a,node b){
    node result;
    result.down=a.down*b.up;
    result.up=a.up*b.down;
    return reflesh(result);
}

void output(node result){
    result=reflesh(result);
    if(result.up<0)
        printf("(");
    if(result.down==1){
        printf("%lld",result.up);
    }else if(abs(result.up)>result.down){
        printf("%lld %lld/%lld",result.up/result.down,abs(result.up)%result.down,result.down);
    }else{
        printf("%lld/%lld",result.up,result.down);
    }
    if(result.up<0)
        printf(")");
}

int main(){
    node a,b;
    scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);
    output(a);
    printf(" + ");
    output(b);
    printf(" = ");
    output(add(a,b));
    printf("n");
    output(a);
    printf(" - ");
    output(b);
    printf(" = ");
    output(minl(a,b));
    printf("n");
    output(a);
    printf(" * ");
    output(b);
    printf(" = ");
    output(doub(a,b));
    printf("n");
    output(a);
    printf(" / ");
    output(b);
    printf(" = ");
    if(b.up==0)
        printf("Inf");
    else
        output(mult(a,b));
    system("pause");
    return 0;
}

脚本宝典总结

以上是脚本宝典为你收集整理的PAT A1088 分数四则运算全部内容,希望文章能够帮你解决PAT A1088 分数四则运算所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: