输入在一行中按照“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));
}
}