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 是 ...
随机推荐
- python_10_文件操作
文件操作逻辑? 打开文件,赋值给一个对象 用对象操作文件 关闭文件 如何打开文件? 在windows中,默认格式gbk,python3.x默认unicode(utf-8),要指定编码值 语法: f = ...
- Python--socketserve源码分析(一)
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass 实现原理: s =socketserver.ThreadingTCPServer(参 ...
- HTML5 拖放(Drag 和 Drop)详解与实例
简介 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 先点击一个小例子:在用户开始拖动 <p> 元素时执行 JavaSc ...
- PHP date函数详解
在页面的最前页加上date_default_timezone_set(PRC); /*把时间调到北京时间,php5默认为格林威治标准时间*/date ()a: "am"或是 ...
- 学会用git真的很重要
一.首先,作为一名开发人员,目前个人菜鸟一个,觉得有个仓库来管理好自己的项目是真的很重要,而目前个人认为在git上面管理自己的项目是真的很不错的推荐,接下来给大家介绍一下如何使用git上传.管理自己的 ...
- Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)
在Win10系统中经常会用到微软帐户登录,如应用商店等地方,不过一些用户反馈原来使用Administrator帐户被绑定微软帐户后无法切换回本地帐户,连[改用本地帐户登录]按钮都没有,那么怎么解决呢? ...
- Failed to get D-Bus connection: Operation not permitted解决
docker中安装centos无法使用systemctl命令管理进程,报以下错误: Failed to get D-Bus connection: Operation not permitted 原因 ...
- C#基础(六)--枚举的一些常用操作
本章将介绍以下几点: 1.如何把其它类型转换为枚举类型? 2.如何把枚举中的值添加到下拉菜单中? 一.如何把其它类型转换为枚举类型? 我们回顾一下有关字符串与数字之间的转换,如: ...
- 深入理解JAVA虚拟机之JVM性能篇---垃圾回收
一.基本垃圾回收算法 1. 判断对象是否需要回收的方法(如何判断垃圾): 1) 引用计数(Reference Counting) 对象增加一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回 ...
- Python之CVXOPT模块
Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为: 卸载原Pyhon中的Numpy 安装CVXOPT的whl文件,链接为:https://www ...