本题要求编写程序,计算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
 package com.hone.basical;

 import java.util.Scanner;

 /**
* 原题目:https://www.patest.cn/contests/pat-b-practise/1034
* @author Xia
*
*/
public class basicalLevel1034count{ public static void main(String[] args) { Scanner in = new Scanner(System.in);
String[] input = in.nextLine().split("[\\s/]"); //首先利用/以及空格将字符串分割
in.close();
long a1 = Integer.parseInt(input[0]);
long b1 = Integer.parseInt(input[1]);
long a2 = Integer.parseInt(input[2]);
long b2 = Integer.parseInt(input[3]); if (b1 != 0 && b2 != 0) {
add(a1, b1, a2, b2);
minus(a1, b1, a2, b2);
mutilply(a1, b1, a2, b2);
divide(a1, b1, a2, b2);
}
} //专门定义一个方法处理数据,并且控制其输出
public static void tackle(long a, long b) {
if (a == 0) {
System.out.print(0);
return;
} boolean isMinus = a > 0 ? false : true; //主要在于控制()的输出
if (isMinus) {
System.out.print("(-");
a = -a;
} long gcd = getGcd(a, b);
a = a / gcd;
b = b / gcd;
if (a % b == 0) {
System.out.print(a / b);
} else if (Math.abs(a) > b) {
System.out.print(a / b + " " + (a % b) % b + "/" + b);
} else if (a == b) {
System.out.print(1);
} else {
System.out.print(a + "/" + b);
} if (isMinus) {
System.out.print(")");
} } public static void divide(long a1, long b1, long a2, long b2) {
tackle(a1, b1);
System.out.print(" / ");
tackle(a2, b2);
System.out.print(" = ");
if (a2 == 0) {
System.out.print("Inf");
} else if (a2 < 0) {
tackle(-1 * a1 * b2, -1 * a2 * b1);
} else {
tackle(a1 * b2, a2 * b1);
}
} public static void mutilply(long a1, long b1, long a2, long b2) {
tackle(a1, b1);
System.out.print(" * ");
tackle(a2, b2);
System.out.print(" = ");
tackle(a1 * a2, b1 * b2);
System.out.println();
} public static void minus(long a1, long b1, long a2, long b2) {
tackle(a1, b1);
System.out.print(" - ");
tackle(a2, b2);
System.out.print(" = ");
tackle(a1 * b2 - a2 * b1, b1 * b2);
System.out.println();
} public static void add(long a1, long b1, long a2, long b2) {
tackle(a1, b1);
System.out.print(" + ");
tackle(a2, b2);
System.out.print(" = ");
tackle(a1 * b2 + a2 * b1, b1 * b2);
System.out.println();
} //得到分母分子的最大公共因子
public static long getGcd(long a, long b) {
while (a % b != 0) {
long temp = a % b;
a = b;
b = temp;
}
return b;
}
}

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

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

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

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

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

  3. PAT 1034 有理数四则运算

    https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008 本题要求编写程序,计算2个有理数的和.差.积 ...

  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. BZOJ1492 [NOI2007]货币兑换

    Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...

  2. NOI 2016 区间 解题报告

    题目描述 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一 ...

  3. jQuery轮播图(一)轮播实现并封装

    利用面向对象自己动手写了一个封装好的jquery轮播组件,可满足一般需求,不仅使用简单且复用性高. demo:点此预览 代码地址:https://github.com/zsqosos/componen ...

  4. LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值

    将数组重新排序以构造最小值 题目描述 给定一个整数数组,请将其重新排序,以构造最小值. 样例 给定[3,32,321],通过将数组重新排序,可构造6个可能性的数字: 3+32+321=332321 3 ...

  5. GDAL读取影像并插值

    影像读取 并缩放 读取大影像某一部分,并缩放到指定大小,我们有时会用如下代码: #include "gdal.h" #include "gdal_priv.h" ...

  6. C/C++遍历进程和进程ID的小工具

    原文:http://blog.csdn.net/qq78442761/article/details/54646010 当我们写某些具有破坏性的程序时就需要对进程进行遍历和提取ID 对于上述功能,我们 ...

  7. 【眼见为实】自己动手实践理解数据库READ COMMITTED && MVCC

    [READ COMMITTED] 首先设置数据库隔离级别为读已提交(READ COMMITTED): set global transaction isolation level READ COMMI ...

  8. redis在windows上安装+RedisDesktopManager

    redis我就不在这里介绍了,这里直接介绍windows安装redis服务,网上有很多介绍windows版,我这边安装的是一个极简版的. redis官方下载地址:https://redis.io/do ...

  9. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上

    昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...

  10. 打通版微社区(5):部署DZ3.2

    参考官方帖子http://www.discuz.net/thread-3258186-1-1.html  这是第三方的帖子http://www.discuz.net/thread-3199850-1- ...