A1088 Rational Arithmetic (20 分)
做起来确实很长,注意全部要用long long,否则很多测试点通不过。
#include<cstdio>
#include<algorithm>
using namespace std;
int gcd(long long a, long long b)
{if (b == 0) return a;else return gcd(b,a%b);
}
struct fraction
{long long up, down;
}a,b;
fraction reduction(fraction result)
{if (result.up == 0) result.down = 1;else{long long x = gcd(abs(result.up), result.down);result.up /= x;result.down /= x;}return result;
}
void showresult(fraction a)
{if (a.up > 0){if (a.down == 1) printf("%lld", a.up);else if (a.up > a.down){printf("%lld %lld/%lld", a.up / a.down, abs(a.up%a.down), a.down);}else if (a.up == a.down) printf("%lld", a.up);else printf("%lld/%lld", a.up, a.down);}else if (a.up == 0) printf("0");else{printf("(");if (a.down == 1) printf("%lld", a.up);else if (abs(a.up) > a.down){printf("%lld %lld/%lld", a.up / a.down, abs(a.up%a.down), a.down);}else if (a.up == a.down) printf("%lld", a.up);else printf("%lld/%lld", a.up, a.down);printf(")");}
}
fraction add(fraction a, fraction b)
{fraction result;result.up = a.up*b.down + a.down*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction mins(fraction a, fraction b)
{fraction result;result.up = a.up*b.down - a.down*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction mult(fraction a, fraction b)
{fraction result;result.up = a.up*b.up;result.down = a.down*b.down;return reduction(result);
}
fraction div(fraction a, fraction b)
{fraction result;result.up = a.up*b.down;result.down = a.down*b.up;if (result.down < 0){result.up = -result.up;result.down = -result.down;}return reduction(result);}
int main()
{scanf("%lld/%lld %lld/%lld", &a.up, &a.down, &b.up, &b.down);a = reduction(a), b = reduction(b);showresult(a);printf(" + ");showresult(b);printf(" = ");showresult(add(a, b));printf("\n");showresult(a);printf(" - ");showresult(b);printf(" = ");showresult(mins(a, b));printf("\n");showresult(a);printf(" * ");showresult(b);printf(" = ");showresult(mult(a, b));printf("\n");showresult(a);printf(" / ");showresult(b);printf(" = ");if (b.up == 0) printf("Inf");else showresult(div(a, b));printf("\n");return 0;
}
A1088 Rational Arithmetic (20 分)相关推荐
- 1088 Rational Arithmetic (20 分)【难度: 简单 / 知识点: 模拟】
https://pintia.cn/problem-sets/994805342720868352/problems/994805378443755520 PAT乙级的原题,直接模拟即可 #inclu ...
- 1081 Rational Sum (20 分) 分数加法 简单模拟
1081 Rational Sum (20 分) Given N rational numbers in the form numerator/denominator, you are suppose ...
- 1081 Rational Sum (20 分)_22行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given N rational numbers in the form numerator/denominator, you a ...
- 21. A1088 Rational Arithmetic
1. 题目描述 For two rational numbers, your task is to implement the basic arithmetics, that is, to calcu ...
- Rational Arithmetic
1088. Rational Arithmetic (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue F ...
- 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)
7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...
- PTA—输出全排列 (20分) 递归回溯思想
PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...
- 2、求100以内的素数之和。(20分)
题目: /* 2.求100以内的素数之和.(20分) */ 代码: public class Two207 {public static void main(String[] args) {int s ...
- 1、输入四个整数,按照从小到大顺序输出。(20分)
题目: /* 1.输入四个整数,按照从小到大顺序输出.(20分) */ 代码: 注:题目说的是四个数的排序,我就直接写了个冒泡排序 public class One207 {public static ...
最新文章
- Go 语言编程 — net/http — HTTP 服务端
- python背景虚化
- SAP空格无法带出历史记录的解决办法
- eai app_EAI的Spring集成教程
- MVC3 学习总结一(未发布)
- am3352 linux 内核 编译,am335x uboot, kernel 编译
- AnyLogic 建立谢林模型
- 验票证明怎么打印_纳税人证明在哪里打印
- 浅谈数据挖掘中的关联规则挖掘
- 菲尔·席勒(Phil Schiller)卸任苹果全球营销高级副总裁,升任苹果研究员
- 【JS】常用效果总结
- 没有安装sql数据库如何用vs打开mdf数据库文件
- 计算机基础名词(二)
- 打开程序,出现最佳分辨率提示窗口,导致程序跳出WIN10
- 整理的金蝶云苍穹初级练习题
- 自我管理的经典书籍推荐:《自我管理必读12篇》
- Python实战技巧(9)Python发送邮件
- 文献阅读 | Tracing the ancestry of modern bread wheats
- 【SPOJ-WACHOVIA】Wachovia Bank【01背包】
- ubuntu进入系统黑屏问题