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){
return getMinimumCommonultiple(max,(max%min));
}
return min;
}
//求两个数的最小公倍数
private static int getGreatestCommonDivisor(int num1,int num2){
return num1*num2/getMinimumCommonultiple(num1,num2);
}
}
测试结果: