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. Scribe+HDFS日志收集系统安装方法

    1.概述 Scribe是facebook开源的日志收集系统,可用于搜索引擎中进行大规模日志分析处理.其通常与Hadoop结合使用,scribe用于向HDFS中push日志,而Hadoop通过MapRe ...

  2. WPF之ListView使用WrapPanel

    原文:WPF之ListView使用WrapPanel 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jiuzaizuotian2014/articl ...

  3. 关于DP和背包

    听说过动态规划(DP)的同学应该都知道有背包问题的存在. 首先我们来了解一下动态规划 基本思想: 动态规划算法通常用于求解具有某种最优性质的问题. 在这类问题中, 可能会有很多可行解.每一个解都对应于 ...

  4. 【转载】CString、BSTR和LPCTSTR之间的区别

    原文:http://www.cnblogs.com/GT_Andy/archive/2011/01/18/1938605.html 一.定义 1.CString:动态的TCHAR数组.它是一个完全独立 ...

  5. 新买的orico蓝牙usb连接器使用方法与驱动

    因为买的型号是 BTA-403 ,所以需要下载该型号驱动 安装好后,可能会出现找不到蓝牙设备问题,所以需要重启机器,并且手动将pc蓝牙连接到手机蓝牙,然后手机蓝牙再连接蓝牙耳机,此时蓝牙耳机会显示连接 ...

  6. set方法在set传入值时报空指针异常,直接设置定值即可

    这种情况可能跟上下的程序有关,所以直接设置定值传入即可. 例如: re.setRid(ar.getRid()); // 这个是报错代码 md.setConnMailStatusTrue(ar.getR ...

  7. UWP 记一次WTS 和 UCT翻车经历

    这次翻车,真的,在网上绝对找不到回答的. 只有在WTS的Issues讨论中才找到,哈哈 不过这个应该比较少遇到吧,据我所知,提出Issue那个大胸弟和我都遇到了... 翻车具备的条件如下: 1. 使用 ...

  8. 什么是Gradle

    一.什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译.打包等过程.我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建ap ...

  9. 获取本地ip和获取公网ip

    import socket def get_local_ip(): ''' 获取本地ip地址 :return: ''' s = socket.socket(socket.AF_INET, socket ...

  10. 0.前言 three.js 简介

    前言 前段时间开始接触three.js本来以为会很简单但是真正开始学习的时候才发现事情并不是我想象的那么容易,three.js的学习资料非常的少稍微好一点的资料就是收费的,给three.js的学习带来 ...