PAT B1034 有理数四则运算 (20 分)
本题要求编写程序,计算 2 个有理数的和、差、积、商。
输入格式:
输入在一行中按照 a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。
输出格式:
分别在 4 行中按照 有理数1 运算符 有理数2 = 结果
的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b
,其中 k
是整数部分,a/b
是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf
。题目保证正确的输出中没有超过整型范围的整数。
输入样例 1:
2/3 -4/2
输出样例 1:
2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)
输入样例 2:
5/3 0/6
输出样例 2:
1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf
#include <iostream> #include <stdio.h> #include <algorithm> #include <string> #include <map> using namespace std; const int maxn = 100010; struct num{long long k = 0;long long up;long long down; }; int gcd(long long a, long long b){return b == 0 ? a : gcd(b, a % b); } num add(num n1, num n2){num res;res.down = n1.down*n2.down;res.up = n1.down*n2.up + n1.up*n2.down;return res; } num sub(num n1, num n2){num res;res.down = n1.down*n2.down;res.up = n2.down*n1.up - n2.up*n1.down;return res; } num mul(num n1, num n2){num res;res.down = n1.down*n2.down;res.up = n1.up*n2.up;return res; } num dive(num n1, num n2){num res;res.down = n1.down*n2.up;res.up = n1.up*n2.down;if (res.down < 0){res.down = -1 * res.down;res.up = -1 * res.up;}return res; } void clean(num n){int flag = 0;n.k = n.up / n.down;if (n.up < 0){n.up = -n.up; flag = 1;}n.up = n.up%n.down;int g = abs(gcd(n.up, n.down));n.up /= g;n.down /= g;if (flag == 1){printf("(");}if (n.k != 0){printf("%lld", n.k);if (n.up != 0){printf(" %lld/%lld", n.up, n.down);}}else{if (n.up != 0){if (flag == 1)printf("-");printf("%lld/%lld", n.up, n.down);}else{printf("0");}}if (flag == 1){printf(")");}} int main(){num n1, n2;scanf("%lld/%lld %lld/%lld", &n1.up, &n1.down, &n2.up, &n2.down);/*int g = abs(gcd(n1.up, n1.down));n1.up /= g;n1.down /= g;g = abs(gcd(n2.up, n2.down));n2.up /= g;n2.down /= g;*/num q, w, e, r;q = add(n1, n2);clean(n1);printf(" + ");clean(n2);printf(" = ");clean(q);printf("\n");w = sub(n1, n2);clean(n1);printf(" - ");clean(n2);printf(" = ");clean(w);printf("\n");r = mul(n1, n2);clean(n1);printf(" * ");clean(n2);printf(" = ");clean(r);printf("\n");if (n2.up != 0){e = dive(n1, n2);clean(n1);printf(" / ");clean(n2);printf(" = ");clean(e);printf("\n");}else{clean(n1);printf(" / ");clean(n2);printf(" = Inf\n");}system("pause"); }
注意点:这道题的坑有两个,一个是int不够大,两个大int乘起来就爆了,要用long long,long long 的输入输出要用lld。第二个是约分,求最大公约数,遍历就超时了,要用辗转相除法,一定要记住!!!
转载于:https://www.cnblogs.com/tccbj/p/10363287.html
PAT B1034 有理数四则运算 (20 分)相关推荐
- 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2
problem 1034 有理数四则运算 (20分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中 ...
- C++学习之路 | PTA乙级—— 1034 有理数四则运算 (20 分)(精简)
1034 有理数四则运算 (20 分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是 ...
- 【PAT乙级】1034 有理数四则运算 (20 分)
题目地址 #include<bits/stdc++.h> using namespace std; typedef long long int LL; LL gcd(LL a,LL b) ...
- 1034 有理数四则运算 (20 分)(c语言)(测试点三)
本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...
- 1034 有理数四则运算 (20分)
本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...
- PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)
PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20) http://www.patest.cn/contests/pat-b-practise/1034 ...
- 1032 挖掘机技术哪家强【PAT乙级】(20分)
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 0 5 10^5 105的正整数 N,即 ...
- 19年秋季第一题 PAT甲级 1161 Forever (20 分) 有点儿意思
如果喜欢我的文章请点赞让我知道噢 题目 7-1 Forever (20 分) "Forever number" is a positive integer A with K dig ...
- PAT 1004 成绩排名 (20分) 犯了所有可能犯的错误
原题 1004 成绩排名 (20分) 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正 ...
最新文章
- redis在PHP中的基本使用案例
- Soj题目分类 python代码)
- jquery.easyui常用示例
- python tk mainloop原理_理解Tkinter mainloop()的逻辑以及为什么变量没有重新分配它们的原始值?...
- 8.霍夫变换:线条——动手编码、霍夫演示_4
- 计算机专业跨考学科英语难吗,跨考学科英语,过来人走过的弯路
- 误删微软应用商店怎么装回来
- 通过VC编程实现基于LAN的PC机与Tektronix示波器通信
- 学习《自己动手写网络爬虫》之记录1
- 苹果分屏软件_苹果iOS14曝光,全是安卓已有的功能!
- 从Unity商店下载的插件存放的位置
- IE8浏览器为什么没有工具-internet选项
- tensor如何实现转置_pytorch tensor 变换
- java web上传视频文件_怎样使用javaweb实现上传视频和下载功能?
- matlab 柱面投影,图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
- Java面试中的常见问题
- python怎么画长方形_Python如何绘制长方形?
- 用户画像 - 挖掘标签
- 【Flink异常】Caused by: java.lang.RuntimeException: Row arity of from does not match serializers
- ffmpeg(ubuntu16.04):视频抽成帧(图片)/图片合成视频
热门文章
- 拉丁超立方抽样matlab代码_想要数据分析更快?超良心的笔记本/台式电脑配置推荐!...
- android studio 设置自动编译_Appium Mac系统 自动测试环境搭建
- NOI入门级:数据结构之线性表
- 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
- 软考高项信息系统项目管理工程师自考500元搞定攻略
- mysql批量查询并替换或者更新某个字段
- ThinkPHP6项目基操(6.数据库Db操作)
- 谷歌的量子计算机速度,谷歌称其量子计算机速度比传统计算机快1亿倍
- 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
- Java笔记-DH密钥交换