本题要求编写程序,计算 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

作者: CHEN, Yue
单位: 浙江大学
时间限制: 200 ms
内存限制: 64 MB
代码长度限制: 16 KB
#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 分)相关推荐

  1. 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2

    problem 1034 有理数四则运算 (20分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中 ...

  2. C++学习之路 | PTA乙级—— 1034 有理数四则运算 (20 分)(精简)

    1034 有理数四则运算 (20 分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是 ...

  3. 【PAT乙级】1034 有理数四则运算 (20 分)

    题目地址 #include<bits/stdc++.h> using namespace std; typedef long long int LL; LL gcd(LL a,LL b) ...

  4. 1034 有理数四则运算 (20 分)(c语言)(测试点三)

    本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...

  5. 1034 有理数四则运算 (20分)

    本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...

  6. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  7. 1032 挖掘机技术哪家强【PAT乙级】(20分)

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 0 5 10^5 105的正整数 N,即 ...

  8. 19年秋季第一题 PAT甲级 1161 Forever (20 分) 有点儿意思

    如果喜欢我的文章请点赞让我知道噢 题目 7-1 Forever (20 分) "Forever number" is a positive integer A with K dig ...

  9. PAT 1004 成绩排名 (20分) 犯了所有可能犯的错误

    原题 1004 成绩排名 (20分) 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正 ...

最新文章

  1. redis在PHP中的基本使用案例
  2. Soj题目分类 python代码)
  3. jquery.easyui常用示例
  4. python tk mainloop原理_理解Tkinter mainloop()的逻辑以及为什么变量没有重新分配它们的原始值?...
  5. 8.霍夫变换:线条——动手编码、霍夫演示_4
  6. 计算机专业跨考学科英语难吗,跨考学科英语,过来人走过的弯路
  7. 误删微软应用商店怎么装回来
  8. 通过VC编程实现基于LAN的PC机与Tektronix示波器通信
  9. 学习《自己动手写网络爬虫》之记录1
  10. 苹果分屏软件_苹果iOS14曝光,全是安卓已有的功能!
  11. 从Unity商店下载的插件存放的位置
  12. IE8浏览器为什么没有工具-internet选项
  13. tensor如何实现转置_pytorch tensor 变换
  14. java web上传视频文件_怎样使用javaweb实现上传视频和下载功能?
  15. matlab 柱面投影,图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
  16. Java面试中的常见问题
  17. python怎么画长方形_Python如何绘制长方形?
  18. 用户画像 - 挖掘标签
  19. 【Flink异常】Caused by: java.lang.RuntimeException: Row arity of from does not match serializers
  20. ffmpeg(ubuntu16.04):视频抽成帧(图片)/图片合成视频

热门文章

  1. 拉丁超立方抽样matlab代码_想要数据分析更快?超良心的笔记本/台式电脑配置推荐!...
  2. android studio 设置自动编译_Appium Mac系统 自动测试环境搭建
  3. NOI入门级:数据结构之线性表
  4. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
  5. 软考高项信息系统项目管理工程师自考500元搞定攻略
  6. mysql批量查询并替换或者更新某个字段
  7. ThinkPHP6项目基操(6.数据库Db操作)
  8. 谷歌的量子计算机速度,谷歌称其量子计算机速度比传统计算机快1亿倍
  9. 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)
  10. Java笔记-DH密钥交换