求分數的和與差

介紹:

給四個整數,從第一個開始,每兩個數爲一個分數,前面的爲分子後面的爲分母,求兩個分數的和與差,如果結果爲整數就輸出整數,如果不是整數,那就輸出最簡分數

思考:

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章