1034 有理数四则运算 (20 分)java
輸入格式:
輸入在一行中按照 a1/b1 a2/b2 的格式給出兩個(gè)分?jǐn)?shù)形式的有理數(shù),其中分子和分母全是整型范圍內(nèi)的整數(shù),負(fù)號(hào)只可能出現(xiàn)在分子前,分母不為 0。
輸出格式:
分別在 4 行中按照 有理數(shù)1 運(yùn)算符 有理數(shù)2 = 結(jié)果 的格式順序輸出 2 個(gè)有理數(shù)的和、差、積、商。注意輸出的每個(gè)有理數(shù)必須是該有理數(shù)的最簡(jiǎn)形式 k a/b,其中 k 是整數(shù)部分,a/b 是最簡(jiǎn)分?jǐn)?shù)部分;若為負(fù)數(shù),則須加括號(hào);若除法分母為 0,則輸出 Inf。題目保證正確的輸出中沒(méi)有超過(guò)整型范圍的整數(shù)。
輸入樣例 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
Think
做除法運(yùn)算時(shí)先要判斷分母。
code
import java.io.*;public class Main {//輾轉(zhuǎn)相除法private static long GCD(long a,long b) {return b == 0 ? a : GCD(b , a % b);}//相加private static String calculate(long a,long b) {if(b == 0) {return "Inf";}long gcd,t,x;gcd = GCD(Math.abs(a), b); //最大公約數(shù)//簡(jiǎn)化a = a / gcd;b = b / gcd;t = Math.abs(a) / b; //整數(shù)x = Math.abs(a) - t * b;//分子if(t == 0 && x == 0) {return "0";}if(a < 0) {if(t != 0 && x != 0)return "(-"+t+" "+x+"/"+b+")";if(t != 0 && x == 0)return "(-"+t+")";if(t == 0 && x != 0)return "(-"+x+"/"+b+")";} else {if (t != 0 && x != 0)return t+" "+x+"/"+b;if(t != 0 && x == 0)return String.valueOf(t);if(t == 0 && x != 0)return x+"/"+b; }return null;}public static void main(String[] args) throws IOException {BufferedReader in = new BufferedReader(new InputStreamReader(System.in));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));String[] istr = in.readLine().split(" ");String[] a = istr[0].split("/"), b = istr[1].split("/");long a1 = Long.parseLong(a[0]), a2 = Long.parseLong(b[0]);long b1 = Long.parseLong(a[1]), b2 = Long.parseLong(b[1]);String A,B;A = calculate(a1,b1);B = calculate(a2,b2);out.println(A + " + " + B + " = " + calculate(a1*b2+a2*b1,b1*b2)); out.flush();out.println(A + " - " + B + " = " + calculate(a1*b2-a2*b1,b1*b2));out.flush();out.println(A + " * " + B + " = " + calculate(a1*a2,b1*b2));out.flush();out.print(A + " / " + B + " = ");out.flush();if(a2 < 0) {out.print(calculate(a1 * b2 * a2 / Math.abs(a2) , b1 * Math.abs(a2)));} else {out.print(calculate(a1 * b2 , b1 * a2));} out.flush();} }
總結(jié)
以上是生活随笔為你收集整理的1034 有理数四则运算 (20 分)java的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【堆内存】动态图+代码五分钟轻松理解学会
- 下一篇: 安卓基本控件及应用总结