输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分
母不为0。
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的
最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中
没有超过整型范围的整数。
5/3 0/6
1 2/3 + 0 = 1 2/3<br/>1 2/3 - 0 = 1 2/3<br/>1 2/3 * 0 = 0<br/>1 2/3 / 0 = Inf
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner keyin = new Scanner(System.in); String str = keyin.nextLine(); String[] strs = str.split(" "); String[] a1b1 = strs[0].split("/"); String[] a2b2 = strs[1].split("/"); int a1 = Integer.valueOf(a1b1[0]); int b1 = Integer.valueOf(a1b1[1]); int a2 = Integer.valueOf(a2b2[0]); int b2 = Integer.valueOf(a2b2[1]); String add = exchange((a1*b2+a2*b1),(b1*b2)); String sub = exchange((a1*b2-a2*b1),(b1*b2)); String mult = exchange((a1*a2),(b1*b2)); String div = exchange((a1*b2),(a2*b1)); String ONE = exchange(a1,b1); String TWO = exchange(a2,b2); System.out.println(ONE+" + "+TWO+" = "+add); System.out.println(ONE+" - "+TWO+" = "+sub); System.out.println(ONE+" * "+TWO+" = "+mult); System.out.println(ONE+" / "+TWO+" = "+div); } public static String exchange(Integer a,Integer b){ String abs ; if (b==0){ return "Inf" ; } if (a/b==0&&a%b==0){ return "0"; } if (a/b==0){ abs = ""; }else { abs = Math.abs(a/b)+""; } String mod ; if (a%b==0) { mod = ""; }else if (a/b==0) { mod = divise(Math.abs(a%b),Math.abs(b)); }else { mod = " "+divise(Math.abs(a%b),Math.abs(b)); } if (a<0||b<0){ return "(-"+abs+mod+")"; }else if (a/b>0){ return a/b+mod; }else { return mod; } } public static String divise(Integer a,Integer b){ int ab = a>b? b : a; int divisor =1; for (int i = 1;i<=ab;i++){ if (a%i==0&&b%i==0){ divisor=i; } } if (divisor==b){ return a/divisor+""; } return a/divisor+"/"+b/divisor; } }
import java.util.*; public class Main{ public static void main(String [] args){ Scanner sc = new Scanner(System.in); String[] s1 = sc.next().split("/"); String[] s2 = sc.next().split("/"); int [] a = {Integer.parseInt(s1[0]), Integer.parseInt(s1[1])}; int [] b = {Integer.parseInt(s2[0]), Integer.parseInt(s2[1])}; yueFen(a); yueFen(b); int [] he = he(a, b); int [] cha = cha(a, b); int [] ji = ji(a, b); int [] shang = shang(a, b); yueFen(a); yueFen(b); yueFen(he); yueFen(cha); yueFen(ji); yueFen(shang); int [] ha = handle(a); int [] hb = handle(b); int [] hhe = handle(he); int [] hcha = handle(cha); int [] hji = handle(ji); int [] hshang = handle(shang); String str1 = exchange(ha); String str2 = exchange(hb); System.out.println(str1 + " + " + str2 + " = " + exchange(hhe)); System.out.println(str1 + " - " + str2 + " = " + exchange(hcha)); if(str2.length() == 1 && str2.equals("0")){ System.out.println(str1 + " * " + str2 + " = " + "0"); System.out.println(str1 + " / " + str2 + " = " + "Inf"); }else { System.out.println(str1 + " * " + str2 + " = " + exchange(hji)); System.out.println(str1 + " / " + str2 + " = " + exchange(hshang)); } } private static String exchange(int[] a) { String s = ""; if(a[1] == 1 && a[2] == 1)return "1"; if(a[1] == 0 ){ if(a[0] == 0)return "0"; s += a[0]; if(a[0] < 0) s = "(" + s + ")"; return s; } if(a[0] != 0) s += Math.abs(a[0]) + " "; s += Math.abs(a[1]) + "/" + Math.abs(a[2]); if(a[0] < 0 || a[1] < 0 || a[2] < 0){ s = "(-" + s + ")"; } return s; } private static int[] handle(int[] a) { int [] ha = {0, a[0], a[1]}; if(Math.abs(a[0]) > Math.abs(a[1])){ ha[0] = a[0] / a[1]; ha[1] = a[0] % a[1]; } return ha; } private static int[] shang(int[] a, int[] b) { int [] res = {0, 0}; if(a[0] == 0) return res; res[0] = a[0] * b[1]; res[1] = a[1] * b[0]; return res; } private static int[] ji(int[] a, int[] b) { int [] res = {0, 0}; if(a[0] == 0 || b[0] ==0) return res; res[0] = a[0] * b[0]; res[1] = a[1] * b[1]; return res; } private static int[] cha(int[] a, int[] b) { int [] res = {0, 0}; if(a[0] == 0 ){ res[0] = -1 * b[0]; res[1] = b[1]; return res; } if(b[0] == 0)return a; res[0] = a[0] - b[0]; res[1] = a[1]; return res; } private static int[] he(int[] a, int[] b) { int [] res = {0, 0}; if(a[0] == 0 )return b; if(b[0] == 0)return a; int k = 0; if(a[1] != b[1]){ k = a[1]; a[1] *= b[1]; a[0] *= b[1]; b[1] = a[1]; b[0] *= k; } res[0] = a[0] + b[0]; res[1] = a[1]; return res; } private static void yueFen(int[] arr) { if(arr[0] == 0){ arr[1] = 0; return ; } if(arr[0] == arr[1]){ arr[0] = arr[1] = 1; return ; } int i = 2; while(i <= Math.abs(arr[0])){ if(arr[0] % i == 0 && arr[1] % i == 0){ arr[0] /= i; arr[1] /= i; i = 1; } i++; } } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String sc1 = sc.next(); String sc2 = sc.next(); sc.close(); int divisor; int[] answer = new int[4]; int[] a = StringToIntArray(sc1), b = StringToIntArray(sc2); divisor = getDivisor(a[0], a[1]); a[0] /= divisor; a[1] /= divisor; divisor = getDivisor(b[0], b[1]); b[0] /= divisor; b[1] /= divisor; int[] printA = new int[4], printB = new int[4]; printA[2] = a[0]; printA[3] = a[1]; printB[2] = b[0]; printB[3] = b[1]; change(printA); change(printB); //加法 answer[2] = a[0] * b[1] + b[0] * a[1]; answer[3] = a[1] * b[1]; divisor = getDivisor(answer[2], answer[3]); answer[2] /= divisor; answer[3] /= divisor; change(answer); System.out.println(printNum(printA) + " + " + printNum(printB) + " = " + printNum(answer)); //减法 answer[2] = a[0] * b[1] - b[0] * a[1]; answer[3] = a[1] * b[1]; divisor = getDivisor(answer[2], answer[3]); answer[2] /= divisor; answer[3] /= divisor; change(answer); System.out.println(printNum(printA) + " - " + printNum(printB) + " = " + printNum(answer)); //乘法 answer[2] = a[0] * b[0]; answer[3] = a[1] * b[1]; divisor = getDivisor(answer[2], answer[3]); answer[2] /= divisor; answer[3] /= divisor; change(answer); System.out.println(printNum(printA) + " * " + printNum(printB) + " = " + printNum(answer)); //除法 if (b[0] != 0) { if (b[0] < 0) { b[1] = -b[1]; b[0] = -b[0]; } answer[2] = a[0] * b[1]; answer[3] = a[1] * b[0]; divisor = getDivisor(answer[2], answer[3]); answer[2] /= divisor; answer[3] /= divisor; change(answer); System.out.println(printNum(printA) + " / " + printNum(printB) + " = " + printNum(answer)); } else { System.out.println(printNum(printA) + " / " + printNum(printB) + " = Inf"); } } //获得最简分数 public static void change (int num[]) { if (num[2] < 0) { num[0] = 1; num[2] = - num[2]; } else { num[0] = 0; } num[1] = num[2] / num[3]; num[2] = num[2] % num[3]; } //字符串转数组 public static int[] StringToIntArray (String str) { int[] num = new int[2]; String[] strArray = str.split("/"); num[0] = Integer.valueOf(strArray[0]); num[1] = Integer.valueOf(strArray[1]); return num; } //获得最大公因数 public static int getDivisor (int a, int b) { if (a < 0) { a = -a; } if (b < 0) { b = -b; } while(a % b != 0){ int temp = a % b; a = b; b = temp; } return b;//最大公因数 } //获得数字对应的字符串 public static String printNum (int[] answer) { StringBuffer a = new StringBuffer(); if (answer[2] != 0) { if (answer[0] == 1) { a.append("(-" + (answer[1] != 0 ? answer[1] + " " : "") + answer[2] + "/" + answer[3] + ")"); } else { a.append((answer[1] != 0 ? answer[1] + " " : "") + answer[2] + "/" + answer[3]); } } else if (answer[1] != 0) { if (answer[0] == 1) { a.append("(-" + (answer[1] != 0 ? answer[1]: "") + ")"); } else { a.append((answer[1] != 0 ? answer[1] : "")); } } else { a.append(0); } return a.toString(); } }
import java.util.Scanner;public class Pat_1024 { private int[] Data; //保存分子和分母 private String[] result; //保存结果 public Pat_1024() { result = new String[4]; //获得数据 Scanner sc = new Scanner(System.in); String str = sc.nextLine(); str = str.replace(" ","/"); //注意该方法不是返回自身,所以需要更新引用 String[] temp = str.split("/"); sc.close(); Data = new int[temp.length]; for(int i=0;i<temp.length;i++) { Data[i] = Integer.parseInt(temp[i]); } } public static void main(String[] args) { Pat_1024 main = new Pat_1024(); main.calculate(); main.printReslt(); } /** * 输出方法:输出四则运算表达式及结果 */ public void printReslt() { System.out.println(getSimple(Data[0], Data[1])+" + "+getSimple(Data[2], Data[3])+" = "+result[0]); System.out.println(getSimple(Data[0], Data[1])+" - "+getSimple(Data[2], Data[3])+" = "+result[1]); System.out.println(getSimple(Data[0], Data[1])+" * "+getSimple(Data[2], Data[3])+" = "+result[2]); System.out.println(getSimple(Data[0], Data[1])+" / "+getSimple(Data[2], Data[3])+" = "+result[3]); } /** * 计算:计算四则运算的结果并存储 */ public void calculate() { result[0] = getSimple(Data[0]*Data[3]+Data[2]*Data[1], Data[1]*Data[3]); result[1] = getSimple(Data[0]*Data[3]-Data[2]*Data[1], Data[1]*Data[3]); result[2] = getSimple(Data[0]*Data[2], Data[1]*Data[3]); result[3] = getSimple(Data[0]*Data[3], Data[1]*Data[2]); } /** * 将数据化为最简 * @param num1分子 * @param num2分母 */ public String getSimple(int num1,int num2) { boolean flag = false;//标记结果的正负 String resultTemp = ""; //保存化简后的结果 int i; //保存整数部分 int temp ; //最大公约数 if(num1<0 && num2<0) { //分子分母同为负 num1 = Math.abs(num1); num2 = Math.abs(num2); } else { if(num1<0 || num2<0) {//分子分母其一为负 flag = true; num1 = Math.abs(num1); num2 = Math.abs(num2); } } //特殊情况 if(num2==0) { return "Inf"; } if(num1==0) { return "0"; } //将分子和分母的最大公约数除去 temp = Math.min(num1, num2); for(;temp>1;temp--) { if(num1%temp==0 && num2%temp==0) { num1 /= temp; num2 /= temp; break; } } //假分数化为真分数 if(num1>num2) { if(num2==1) //结果为整数 resultTemp = ""+num1; else { i = num1/num2; num1 -= i*num2; resultTemp = i+" "+num1+"/"+num2; } }else { if(num1==num2) //结果为1 resultTemp = "1"; else { //本身就是真分数 resultTemp = num1+"/"+num2; } } if(flag) { //改变结果的正负 resultTemp = "(-"+resultTemp+")"; } return resultTemp; } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { private static String euclideanFunction(int numerator, int denominator) { int a = numerator; int b = denominator; boolean negative = false; boolean hasInteger = false; //去除负号 if(a < 0 && b < 0) { a -= 2 * a; b -= 2 * b; }else if(a < 0) { negative = true; a -= 2 * a; }else if(b < 0) { negative = true; b -= 2 * b; } String result = ""; if(b == 0) { result = "Inf"; }else if(a == 0) { result = "0"; }else { int c = 0; //求最大公约数 while((a % b) != 0) { c = a % b; a = b; b = c; } //数字不能化作整数则进行约分 if(c != 0) { a = numerator; b = denominator; //去除负号 if(a < 0 && b < 0) { a -= 2 * a; b -= 2 * b; }else if(a < 0) { a -= 2 * a; }else if(b < 0) { b -= 2 * b; } a /= c; b /= c; } if(negative) { result += "(-"; } //整数部分 if((a / b) > 0) { result += (a / b); hasInteger = true; } //分数部分 if((a % b) > 0) { if(hasInteger) { result += " "; } result += (a % b) + "/" + b; } if(negative) { result += ")"; } } return result; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String[] numbers = bufferedReader.readLine().split(" "); String[] number1 = numbers[0].split("/"); String[] number2 = numbers[1].split("/"); int a1 = Integer.parseInt(number1[0]); int a2 = Integer.parseInt(number1[1]); int b1 = Integer.parseInt(number2[0]); int b2 = Integer.parseInt(number2[1]); String simpleNumber1 = euclideanFunction(a1, a2); String simpleNumber2 = euclideanFunction(b1, b2); System.out.println(simpleNumber1 + " + " + simpleNumber2 + " = " + euclideanFunction(a1 * b2 + a2 * b1, a2 * b2)); System.out.println(simpleNumber1 + " - " + simpleNumber2 + " = " + euclideanFunction(a1 * b2 - a2 * b1, a2 * b2)); System.out.println(simpleNumber1 + " * " + simpleNumber2 + " = " + euclideanFunction(a1 * b1, a2 * b2)); System.out.println(simpleNumber1 + " / " + simpleNumber2 + " = " + euclideanFunction(a1 * b2, a2 * b1)); } }