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 = ;
- struct num{
- long long k = ;
- long long up;
- long long down;
- };
- int gcd(long long a, long long b){
- return b == ? 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 < ){
- res.down = - * res.down;
- res.up = - * res.up;
- }
- return res;
- }
- void clean(num n){
- int flag = ;
- n.k = n.up / n.down;
- if (n.up < ){
- n.up = -n.up;
- flag = ;
- }
- n.up = n.up%n.down;
- int g = abs(gcd(n.up, n.down));
- n.up /= g;
- n.down /= g;
- if (flag == ){
- printf("(");
- }
- if (n.k != ){
- printf("%lld", n.k);
- if (n.up != ){
- printf(" %lld/%lld", n.up, n.down);
- }
- }
- else{
- if (n.up != ){
- if (flag == )printf("-");
- printf("%lld/%lld", n.up, n.down);
- }
- else{
- printf("");
- }
- }
- if (flag == ){
- 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 != ){
- 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。第二个是约分,求最大公约数,遍历就超时了,要用辗转相除法,一定要记住!!!
PAT B1034 有理数四则运算 (20 分)的更多相关文章
- PAT1034 有理数四则运算 (20分)
1034 有理数四则运算 (20分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全 ...
- PAT 1034 有理数四则运算(20)(代码框架+思路+测试点错误分析)
1034 有理数四则运算(20)(20 分)提问 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的 ...
- 1034 有理数四则运算 (20 分)C语言
题目描述 本题要求编写程序,计算2个有理数的和.差.积.商. 输入描述: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整 ...
- PAT 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 ...
- PAT-乙级-1034. 有理数四则运算(20)
1034. 有理数四则运算(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求编写程序,计算2个有理 ...
- PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]
题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...
- 【算法笔记】B1034 有理数四则运算
1034 有理数四则运算 (20 分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母 ...
- pat 1035 Password(20 分)
1035 Password(20 分) To prepare for PAT, the judge sometimes has to generate random passwords for the ...
随机推荐
- Codeforces833A
A. The Meaningless Game time limit per test:1 second memory limit per test:256 megabytes input:stand ...
- 【 js 算法类】这么全的数组去重,你怕不怕?
以 var arr = [1,2,3,1]; 作为测试用例 方法一:双循环 (时间复杂度比较高,性能一般.) A.(1) function unique(arr) { var newArr = [ ...
- socket 模拟 HTTP请求
一.socket介绍 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层.socket则是对TCP/I ...
- php递归获取无限分类菜单
从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...
- Adapter中用不了getWindowManager()
在写popupwindow的时候一般会获取屏幕的宽高来设置popupwindow的宽高,但是在adapter中用不了getWindowManager(), 但是为什么Activity中就可以用getW ...
- 微信小程序开发--宽为百分百,页面仍可左右滑动
这段时间小程序开发时,很多时候,希望内容充满整个屏幕(高度.宽度100%),如下图 但是在设置 .followrecords-container{width:100%;} 后发现 手机在横向上虽然页面 ...
- Python笔记(十三):urllib模块
(一) URL地址 URL地址组件 URL组件 说明 scheme 网络协议或下载方案 net_loc 服务器所在地(也许含有用户信息) path 使用(/)分割的文件或CGI应用的路径 p ...
- 双启动:安装Windows 7 和 CentOS 7 双系统教程
笔记本配置:8G内存,200G SSD,先在virbox中成功安装双系统,能正常进入并使用 Windows 7 和 CentOS 7. 网上看到一大堆的安装 wingrub easyBCD,折腾了一 ...
- LeetCode题解之Longest Continuous Increasing Subsequence
1.题目描述 2.问题分析 从每一个num[i]往前扫描即可. 3.代码 int findLengthOfLCIS(vector<int>& nums) { ){ return n ...
- 七牛云A账号数据迁移到B账号下
1,七牛云A账号下开启空间授权,可以让B账号可以访问A账号下的空间,,授予权限只读即可. 2,下载七牛云命令行工具.(通过命令完成数据迁移) https://dn-devtools.qbox.me/2 ...