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 是 ...
随机推荐
- JVM 自动内存管理:对象判定和回收算法
- 长整形 Unix系统毫秒时间 (long类型) 转换为时间格式
/** * 把毫秒转化成日期 * * @param dateFormat(日期格式,例如:MM/ dd/yyyy HH:mm:ss) * @param millSec(毫秒数) * @return * ...
- CentOS之7与6的区别
前言 centos7与6之间最大的差别就是初始化技术的不同,7采用的初始化技术是Systemd,并行的运行方式,除了这一点之外,服务启动.开机启动文件.网络命令方面等等,都说6有所不同.让我们先来了解 ...
- 【转】GAMITBLOBK中固定解、浮点解、约束解、松弛解等解类型解释
在GAMIT/GLOBK的使用过程中,经常会碰到固定解.浮点解.约束解.松弛解及其相关组合解(如约束固定解)等词汇,对于初学者,一时难以弄明白其中的含义,一般只有按部就班按照教程中,怎么说就怎么弄,不 ...
- maven将本地jar包导入本地仓库
从maven中央仓库下载下来的jar包手动导入本地库,如下图 以下其中maven的dependency <dependency> <groupId>org.molgenis&l ...
- JAVA并发编程学习笔记------线程的三种创建方式
创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...
- 安装Mercurial进行版本管理
mercurial是又一个去中心化的版本管理软件,类似git 先介绍如何安装mercurial yum -y install mercurial mercurial需要一个用户名来记录commit动作 ...
- iOS-Mac Charles抓包工具的使用【Mac 抓包工具Charles】
1.下载文件 Charles安装包以及破解文件下载地址:http://charles.iiilab.com 2.安装及使用 使用介绍 http://www.cocoachina.com/ios/201 ...
- Using Custom Domains With IIS Express In Asp.Net Core
IIS Express是一个Mini版的IIS,能够支持所有的Web开发任务,但是这种设计有一些缺陷,例如只能通过localhost:<port>的方式来访问我们的应用程序,看起来就有点不 ...
- dos2unix和unix2dos
dos2unix将windows格式的文件转换为linux格式的文件. unix2dos将linux格式的文件转换为windows格式的文件. dos2unix和unix2dos会转换windows和 ...