每天一道编程题4--编程

版权声明:Mr.Wang 汪先生 https://blog.csdn.net/weixin_37650458/article/details/84962866

1.题目

实现两个分数的加减法:

 样例输入:

1/8+3/8
1/4-1/2
1/3-1/3

样例输入:

1/2
-1/4
0

 

package com.wx.day05;

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        //实现两个分数的加减法
        //两个步骤,第一求出最小公倍数
        //第二通分
        //第三 相加减

        //输入两个分数:样例:
        /*
        * 1/8+3/8
          1/4-1/2
          1/3-1/3
        * */
        Scanner scanner = new Scanner(System.in);
        String num1 = scanner.nextLine();
        char operate=scanner.nextLine().charAt(0);
        String num2 = scanner.nextLine();
        Operate compute = Context.compute(operate);
        String re = compute.operate(num1, num2);
        System.out.println(re);
    }
}

 操作接口:

package com.wx.day05;

public interface Operate {
    String operate(String num1,String num2);
}

 实现操作接口:

package com.wx.day05;

public class OperateAdd implements Operate {
    @Override
    public String operate(String num1, String num2) {
        //通分
        TotalScore totalScore=new TotalScore();
        String s = totalScore.totalScore(num1, num2);
        //相加
        String[] split = s.split(":");
        String strnum1=split[0];
        String strnum2=split[1];
        String[] split1 = strnum1.split("/");
        int fenzi1=Integer.parseInt(split1[0]);
        String[] split2 = strnum2.split("/");
        int fenzi2=Integer.parseInt(split2[0]);
        int fenzi=fenzi1+fenzi2;
        int minimumCommonultiple = TotalScore.getMinimumCommonultiple(fenzi, Integer.parseInt(split1[1]));
        return (fenzi/minimumCommonultiple)+"/"+(Integer.parseInt(split1[1])/minimumCommonultiple);
    }
}

 创建实例类型的工厂:

package com.wx.day05;

public class Context {

    public static Operate compute(char ope) {
        Operate operate=null;
        switch (ope){
            case '+':operate=new OperateAdd();break;
            case '-':operate=new OperateReduce();break;
        }
        return operate;
    }
}

  工具类:

package com.wx.day05;

public class TotalScore {
    public static String totalScore(String num1, String num2) {
        String[] split1 = num1.split("/");
        int denominator1 = Integer.parseInt(split1[1]);
        int molecule1 = Integer.parseInt(split1[0]);
        String[] split2 = num2.split("/");
        int denominator2 = Integer.parseInt(split2[1]);
        int molecule2 = Integer.parseInt(split2[0]);
        int Greatest_Common_Divisor = 1;
        //求最小公倍数
        Greatest_Common_Divisor=getGreatestCommonDivisor(denominator1, denominator2);
        int newdenominator1=denominator1*(Greatest_Common_Divisor/denominator1);
        int newmolecule1=molecule1*(Greatest_Common_Divisor/denominator1);
        String strNum1=newmolecule1+"/"+newdenominator1;
        int newdenominator2=denominator2*(Greatest_Common_Divisor/denominator2);
        int newnewmolecule1=molecule2*(Greatest_Common_Divisor/denominator2);
        String strNum2=newnewmolecule1+"/"+newdenominator2;
        return strNum1+":"+strNum2;

    }
    //求两个数的最大公约数
    public static int getMinimumCommonultiple(int num1,int num2){
        int max,min;
        max=(num1>num2)?num1:num2;
        min=(num1<num2)?num1:num2;
        if (max%min!=0){
            getMinimumCommonultiple(max,(max%min));
        }
        return min;
    }
    //求两个数的最小公倍数
    private static int getGreatestCommonDivisor(int num1,int num2){
        return num1*num2/getMinimumCommonultiple(num1,num2);
    }

}

测试结果:

猜你喜欢

转载自blog.csdn.net/weixin_37650458/article/details/84962866