https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008

本题要求编写程序,计算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 <bits/stdc++.h>
using namespace std; long long int gcd(long long int x,long long int y) {
long long int z = x % y;
while(z)
{
x = y;
y = z;
z = x % y;
}
return y;
} void out(long long int x,long long int y) {
if(y < 0) {
y = y * (-1);
x = x * (-1);
}
if(x > 0) {
if(y == 1) printf("%lld", x);
else {
if(x % y == 0) printf("%lld", x / y);
else {
if(x < y) printf("%lld/%lld", x / gcd(x, y), y / gcd(x, y));
else printf("%lld %lld/%lld", x / y, (x % y) / gcd(x % y, y), y / gcd(x % y, y));
}
}
}
else if(x == 0) printf("0");
else {
if(y == 1) printf("(%lld)", x);
else {
if(x % y == 0) printf("(%lld)", x / y);
else {
if(abs(x) < y) printf("(%lld/%lld)", x / abs(gcd(x, y)), y / abs(gcd(x, y)));
else printf("(%lld %lld/%lld)", x / y, abs(x) % y/gcd(abs(x) % y, y), y / gcd(abs(x) % y, y));
}
}
}
} void add(long long int a1, long long int b1, long long int a2, long long int b2) {
out(a1, b1);
printf(" + ");
out(a2, b2);
printf(" = ");
long long int a3 = a1 * b2 + a2 * b1;
long long int b3 = b1 * b2;
out(a3, b3);
printf("\n");
} void subtract(long long int a1, long long int b1, long long int a2, long long int b2) {
out(a1, b1);
printf(" - ");
out(a2, b2);
printf(" = ");
long long int a3 = a1 * b2 - a2 * b1;
long long int b3 = b1 * b2;
out(a3, b3);
printf("\n");
} void multiplication(long long int a1, long long int b1, long long int a2, long long int b2) {
out(a1, b1);
printf(" * ");
out(a2, b2);
printf(" = ");
long long int a3 = a1 * a2;
long long int b3 = b1 * b2;
out(a3, b3);
printf("\n");
} void division(long long int a1, long long int b1, long long int a2, long long int b2) {
out(a1, b1);
printf(" / ");
out(a2, b2);
printf(" = ");
if(a2 * b2 == 0) {
printf("Inf");
return ;
}
long long int a3 = a1 * b2;
long long int b3 = a2 * b1;
out(a3, b3);
printf("\n");
} int main() {
long long int a, b, c, d;
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
add(a, b, c, d);
subtract(a, b, c, d);
multiplication(a, b, c, d);
division(a, b, c, d);
return 0;
}

  

PAT 1034 有理数四则运算的更多相关文章

  1. PAT 1034 有理数四则运算(20)(代码框架+思路+测试点错误分析)

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

  2. PAT——1034. 有理数四则运算

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

  3. PAT 1034. 有理数四则运算(20)

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

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

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

  5. PAT(B) 1034 有理数四则运算(Java)

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

  6. PAT-乙级-1034. 有理数四则运算(20)

    1034. 有理数四则运算(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求编写程序,计算2个有理 ...

  7. P 1034 有理数四则运算

    转跳点:

  8. PAT乙级1034. 有理数四则运算(20)

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

  9. PAT Basic 1034 有理数四则运算(20) [数学问题-分数的四则运算]

    题目 本题要求编写程序,计算2个有理数的和.差.积.商. 输⼊格式: 输⼊在⼀⾏中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数, ...

随机推荐

  1. JavaEE笔记(二)

    查询load()和get()的区别 # 以下查询都是根据id查询 // Load和Get都会在第一次查询的是创建一个一级缓存查询语句 // 下一次查询的时候从缓存中查询是否有缓存的语句 // 如果有只 ...

  2. 25-[jQuery]-事件

    重点:jQuery事件绑定on().bind()与delegate() 方法详解 1.jquery的事件 <!DOCTYPE html> <html lang="en&qu ...

  3. GBDT+LR算法解析及Python实现

    1. GBDT + LR 是什么 本质上GBDT+LR是一种具有stacking思想的二分类器模型,所以可以用来解决二分类问题.这个方法出自于Facebook 2014年的论文 Practical L ...

  4. js 日期,时间函数 及相关运算大全

    一.在js中如何比较两个时间字符串的大小 方法一: function CompareDate(d1,d2){     return ((new Date(d1.replace(/-/g,"/ ...

  5. Git使用教程(一)---本地git管理

    之前写过不少小demo,因为没有很好的整理,很多demo都找不到了,必要的时候又要重新写这些demo:这是一个很头疼的问题,很烦躁.网上看到git的版本控制以及托管,很nice.开始学习使用git,关 ...

  6. 006 --MySQL索引原理

    一 .索引的概念? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化 ...

  7. 005 -- Mysql数据库引擎特点分析

    常用的数据库引擎的特点: ISAM: ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库查询次数要远大于更新次数.因此,ISAM执行读取操作的速度很快,而且不占用大量的 ...

  8. CentOS查看一共安装了多少软件包,是那些软件包

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48292853 一.如何得知共安装了多少个软件包 [root@localhost ~ ...

  9. http跳转https方法:百度云如何让http自动跳转到https【免费SSL证书使用FAQ】

    之前的一篇文章已经给大家提供了免费SSL证书的申请方法,这一篇文章是告诉大家在使用免费的SSL证书时可能会遇到的问题[怎么让http自动跳转到https以及http与https同时使用]的解决方法. ...

  10. python-分叉树枝

    import turtle def draw_branch(length): #绘制右侧树枝 if length >5: if length == 10: turtle.pencolor('gr ...