思路:是个水题,但是有坑。不能被题目忽悠了,题目保证正确的输出中没有超过整型范围的整数。 它只是保证结果不超出int,但是我们在运算过程中的乘法可能会超出int,直接把所有int改成long long


AC代码

#include <stdio.h>
#include <algorithm>
using namespace std;
typedef long long LL;

LL a, b, c, d;
LL e, f, g, h;

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

void kill(LL &a, LL &b, LL &e, LL &f) {
    if(b == 0) {
        printf("Inf");
        return;
    }
    if(a == 0) {
        printf("0");
        e = 0, f = 1;
        return;
    } else {
        LL r = gcd(a, b);
        e = a / r, f = b / r;
    }
    LL l = abs(e) / abs(f);
    LL p = abs(e) - l * abs(f);
    if(e < 0 || f < 0) {
        printf("(");
    }

    if(e < 0 || f < 0) {
        printf("-");
    }
    //output
    if(l != 0) printf("%d", l);
    if(l != 0 && p != 0) printf(" ");
    if(p != 0) {
        printf("%d/%d", p, abs(f));
    }

    if(e < 0 || f < 0) {
        printf(")");
    }
}

void add() {
    kill(a, b, e, f);
    printf(" + ");
    kill(c, d, g, h);
    printf(" = ");
    LL p = f*h / gcd(f, h);
    LL res = e * (p/f) + g * (p/h);
    kill(res, p, res, p);
    printf("\n");
}

void sub() {
    kill(a, b, e, f);
    printf(" - ");
    kill(c, d, g, h);
    printf(" = ");
    LL p = f*h / gcd(f, h);
    LL res = e * (p/f) - g * (p/h);
    kill(res, p, res, p);
    printf("\n");
} 

void mul() {
    kill(a, b, e, f);
    printf(" * ");
    kill(c, d, g, h);
    printf(" = ");
    LL res = e * g;
    LL p = f * h;
    kill(res, p, res, p);
    printf("\n");
}

void div() {
    kill(a, b, e, f);
    printf(" / ");
    kill(c, d, g, h);
    printf(" = ");
    LL res = e * h;
    LL p = f * g;
    kill(res, p, res, p);
    printf("\n");
}

int main() {

    while(scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d) != EOF) {
        add();
        sub();
        mul();
        div();
    }
    return 0;
}

如有不当之处欢迎指出!

PAT乙级 1034的更多相关文章

  1. PAT乙级1034. 有理数四则运算(20)

    本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分 ...

  2. pat乙级1034

    1.vs2013不能用scanf,改为scanf_s,但是提交时不能用scanf_s,用scanf... scanf_s(], &a[], &b[], &b[]); 2.c++ ...

  3. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  4. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  5. PAT甲级1034. Head of a Gang

    PAT甲级1034. Head of a Gang 题意: 警方找到一个帮派的头的一种方式是检查人民的电话.如果A和B之间有电话,我们说A和B是相关的.关系的权重被定义为两人之间所有电话的总时间长度. ...

  6. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  7. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  8. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

  9. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

随机推荐

  1. CentOS 7 修改SSH端口号 和 ssh无法使用密码登录 和 查看pid 端口占用

    如下示例把SSH默认端口22改为122. 1 修改/etc/ssh/sshd_config文件 #Port #找到改行,如果还想继续使用该端口,可以把#去掉,如果使用新端口,可以默认不管 Port # ...

  2. 【总目录】——概率论与数理统计及Python实现

    注:这是一个横跨数年的任务,标题也可以叫做“从To Do List上划掉学习统计学”.在几年前为p值而苦恼的时候,还不知道Python是什么:后来接触过Python,就喜欢上了这门语言.统计作为数据科 ...

  3. EL表达式和JSTL核心标签库

    1 EL表达式 1.1 EL的概述 EL,全名为Expression Language. 主要作用: ①EL表达式主要用于替换jsp页面中的脚本表达式,以便于从各种类型的web域中检索java对象(某 ...

  4. 手机文件夹的emulated什么意思

    词典翻译是仿真,就是自带的存储卡, 手机的储存方式有两种,一种是手机内存 ,一种是SD卡内存.

  5. phpmailer发送邮件服务

    获取开源的phpmail类 开启stmp服务登录126/163邮箱 ->设置->POPS/SMTP/IMAP(开启需要的服务,并点击保存,初次使用会要求设置一个授权码) 测试 <?p ...

  6. Part 3:视图和模板--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  7. 读Ghost博客源码与自定义Ghost博客主题

    我使用的Ghost博客一直使用者默认的Casper主题.我向来没怎么打理过自己博客,一方面认为自己不够专业,很难写出质量比较高的文字:另一方面认为博客太耗时间,很容易影响正常的工作内容.最近公司即将搬 ...

  8. Spring整合JMS(二)——三种消息监听器

    原文地址:http://haohaoxuexi.iteye.com/blog/1893676 1.3     消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监 ...

  9. VS2012以后版本MFC程序发布记录,支持XP

    ##概述 自从VS2012之后,增加了新的VC运行时库,而一般用户机器上不一定有对应的版本的运行时库,所以微软官方给出的方案是需要用户安装对应版本的VisualC++Redistributable P ...

  10. Nginx Rewrite规则详解

    Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等. Rewrite规则的最后一项参数为flag标记,支持的flag标记主要有以下几种 ...