介紹:
給四個整數,從第一個開始,每兩個數爲一個分數,前面的爲分子後面的爲分母,求兩個分數的和與差,如果結果爲整數就輸出整數,如果不是整數,那就輸出最簡分數
思考:
1.就用解數學題的方式來做,將兩個分數的分母化成相同的數,然後計算分子
2.算出結果之後,要求最簡的分數,直接同時除以分子和分母的最大公約數就行了。
package 初級;
import java.util.Scanner;
/*
* 介紹:
* 依次給四個整數,每兩個爲一個分數。求他們的和和差
*/
public class 分數的加減 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
int d = input.nextInt();
add(a,b,c,d);
subtract(a,b,c,d);
}
private static void subtract(int a, int b, int c, int d) {
if((a*d-b*c)%(b*d) == 0){//當能夠整除的話
int result = (a*d-b*c)/(b*d);
System.out.println(a+"/"+b+"-"+c+"/"+d+" = "+result);
}else{
int fenzi = (a*d-b*c);
int fenmu = (b*d);
int max = getMax(fenzi,fenmu);
fenzi = fenzi / max;
fenmu = fenmu / max;
System.out.println(a+"/"+b+"-"+c+"/"+d+" = "+ fenzi +"/"+ fenmu);
}
}
private static void add(int a, int b, int c, int d) {
if((a*d+b*c)%(b*d) == 0){//當能夠整除的話
int result = (a*d+b*c)/(b*d);
System.out.println(a+"/"+b+"+"+c+"/"+d+" = "+result);
}else{//不能整除,則顯示爲分數,並且要化到最簡
int fenzi = (a*d+b*c);
int fenmu = (b*d);
int max = getMax(fenzi,fenmu);//求兩個數的最大公約數,就可以直接得到最簡式
fenzi = fenzi / max;
fenmu = fenmu / max;
System.out.println(a+"/"+b+"+"+c+"/"+d+" = "+ fenzi +"/"+ fenmu);
}
}
//得到最大公約數
private static int getMax(int x, int y) {
int temp,a,b;
if(x<y){//當x<y時,將x、y換位置。使x>y,因爲求最大公約數是取餘,前面的數要比後面的大
temp = y;
y = x;
x = temp;
}
a = x;
b = y;
while(b!=0){
//第一次判斷的時候,如果b==0,那麼說明最大公約數就是0;
//第一次過後,b就代表的是餘數了,餘數如果不爲0,說明還沒有整除,需要一直循環,直到能夠整除。
//當b==0時,上一個b的值賦值給了a。所以最大公約數現在是a。
temp = a%b;
a = b;
b = temp;
}
return a;
}
}