本题要求编写程序,计算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
1 package com.hone.basical; 2 3 import java.util.Scanner; 4 5 /** 6 * 原题目:https://www.patest.cn/contests/pat-b-practise/1034 7 * @author Xia 8 * 9 */ 10 public class basicalLevel1034count{ 11 12 public static void main(String[] args) { 13 14 Scanner in = new Scanner(System.in); 15 String[] input = in.nextLine().split("[\s/]"); //首先利用/以及空格将字符串分割 16 in.close(); 17 long a1 = Integer.parseInt(input[0]); 18 long b1 = Integer.parseInt(input[1]); 19 long a2 = Integer.parseInt(input[2]); 20 long b2 = Integer.parseInt(input[3]); 21 22 if (b1 != 0 && b2 != 0) { 23 add(a1, b1, a2, b2); 24 minus(a1, b1, a2, b2); 25 mutilply(a1, b1, a2, b2); 26 divide(a1, b1, a2, b2); 27 } 28 } 29 30 //专门定义一个方法处理数据,并且控制其输出 31 public static void tackle(long a, long b) { 32 if (a == 0) { 33 System.out.print(0); 34 return; 35 } 36 37 boolean isMinus = a > 0 ? false : true; //主要在于控制()的输出 38 if (isMinus) { 39 System.out.print("(-"); 40 a = -a; 41 } 42 43 long gcd = getGcd(a, b); 44 a = a / gcd; 45 b = b / gcd; 46 if (a % b == 0) { 47 System.out.print(a / b); 48 } else if (Math.abs(a) > b) { 49 System.out.print(a / b + " " + (a % b) % b + "/" + b); 50 } else if (a == b) { 51 System.out.print(1); 52 } else { 53 System.out.print(a + "/" + b); 54 } 55 56 if (isMinus) { 57 System.out.print(")"); 58 } 59 60 } 61 62 public static void divide(long a1, long b1, long a2, long b2) { 63 tackle(a1, b1); 64 System.out.print(" / "); 65 tackle(a2, b2); 66 System.out.print(" = "); 67 if (a2 == 0) { 68 System.out.print("Inf"); 69 } else if (a2 < 0) { 70 tackle(-1 * a1 * b2, -1 * a2 * b1); 71 } else { 72 tackle(a1 * b2, a2 * b1); 73 } 74 } 75 76 public static void mutilply(long a1, long b1, long a2, long b2) { 77 tackle(a1, b1); 78 System.out.print(" * "); 79 tackle(a2, b2); 80 System.out.print(" = "); 81 tackle(a1 * a2, b1 * b2); 82 System.out.println(); 83 } 84 85 public static void minus(long a1, long b1, long a2, long b2) { 86 tackle(a1, b1); 87 System.out.print(" - "); 88 tackle(a2, b2); 89 System.out.print(" = "); 90 tackle(a1 * b2 - a2 * b1, b1 * b2); 91 System.out.println(); 92 } 93 94 public static void add(long a1, long b1, long a2, long b2) { 95 tackle(a1, b1); 96 System.out.print(" + "); 97 tackle(a2, b2); 98 System.out.print(" = "); 99 tackle(a1 * b2 + a2 * b1, b1 * b2); 100 System.out.println(); 101 } 102 103 //得到分母分子的最大公共因子 104 public static long getGcd(long a, long b) { 105 while (a % b != 0) { 106 long temp = a % b; 107 a = b; 108 b = temp; 109 } 110 return b; 111 } 112 }