PAT乙级 1034
思路:是个水题,但是有坑。不能被题目忽悠了,题目保证正确的输出中没有超过整型范围的整数。 它只是保证结果不超出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的更多相关文章
- PAT乙级1034. 有理数四则运算(20)
本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分 ...
- pat乙级1034
1.vs2013不能用scanf,改为scanf_s,但是提交时不能用scanf_s,用scanf... scanf_s(], &a[], &b[], &b[]); 2.c++ ...
- C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT甲级1034. Head of a Gang
PAT甲级1034. Head of a Gang 题意: 警方找到一个帮派的头的一种方式是检查人民的电话.如果A和B之间有电话,我们说A和B是相关的.关系的权重被定义为两人之间所有电话的总时间长度. ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
- PAT 乙级 1017
题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...
- PAT 乙级 1015
题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...
- PAT 乙级 1003
题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...
随机推荐
- Git: 本地创建版本库用于多处同步
问题背景 目前有一个 Android 和 一个 iOS 项目,两个项目底层使用相同的 C++ 代码.由于在开发迭代中代码时常更新,而且往往是今天 Android 部分修改一小部分,明天 iOS 部分修 ...
- Python程序的执行方式
Python代码有两种执行方式: 一.文件执行 二.交互器执行(推荐) 一.文件执行 1.用 notepad++ 或 Sublime Text,甚至 写字本创建一个文件. 2.比如:print('He ...
- android view控件的显示和隐藏动画效果
// 显示动画 mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO ...
- IO (五)
1 序列化和反序列化 1.1 ObjectOutputStream 序列化 1.1.1 概述 ObjectOutputStream将Java对象的基本数据写入OutputStream,可以使用Obje ...
- C#高性能大容量SOCKET并发(八):通讯协议
协议种类 开发Socket程序有两种协议类型,一种是用文本描述的,类似HTTP协议,定义字符集,好处是兼容性和调试方便,缺点是解析文本会损耗一些性能:一种是用Code加结构体,定义字节顺序,好处是性能 ...
- 04_Javascript初步第一天
视频来源:麦子学院[看来是麦子的忠实粉丝] 讲师:King我只是想记住对应的中文翻译:Uncaught SyntaxError: missing ) after argument list//属性列表 ...
- Node.js--安装express以及创建第一个express项目(windows)
1.根据新版的express出现了安装器的概念,安装express需要两个步骤(命令行找到nodejs目录全局安装): (1)npm install -g express@4.15.0 (也可省略 ...
- Linux 下定时备份数据库以及删除缓存
一.定时备份数据库 1.在根目录下创建备份文件夹 #mkdir backup 2.进入到该目录下,创建backup.sh文件 3.赋予文件权限让其变成可执行文件 4.在backup.sh中写备份的脚本 ...
- JavaBean,List,Map,json格式之间转化方式
public class TestBean { private String id; private String name; private String password; public Stri ...
- 小白学Docker之Swarm
承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started 系列文章: 小白学Docker之基础篇 小白学Docker之Co ...