求分数的和与差

介绍:

给四个整数,从第一个开始,每两个数为一个分数,前面的为分子后面的为分母,求两个分数的和与差,如果结果为整数就输出整数,如果不是整数,那就输出最简分数

思考:

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值