题目: 1、写一个分数类,实现分数的加、减、乘、除; 2、对下面分数从小到大排序:1/2 , 2/3 , 48/62 , 70/20, 9/25 我的解法如下,大家一起讨论讨论: package com.gzitc.exam; /** * 求最大公约数,最小公倍数 * @author e606#qq.com * */ public class MathUtil { /** * 两个数求最大公约数,可以用辗转相除法。 * 始终用较大数除以较小数,然后用余数代替较大数。整除时的除数就是最大公约数。 * @param a * @param b * @return */ public static long gY(long a, long b) { long r = 1; if(a < b) { long t = a; a = b; b = t; } r = a % b; while( r != 0) { long t = r; r = b % r; b = t; } return b; } /** * 求公倍数 * @param a * @param b * @return */ public static long gB(long a, long b) { long gb = 0; gb = a * b / gY(a, b); return gb; } } package com.gzitc.exam; /** * 求最大公约数,最小公倍数 * @author e606#qq.com * */ public class MathUtil { /** * 两个数求最大公约数,可以用辗转相除法。 * 始终用较大数除以较小数,然后用余数代替较大数。整除时的除数就是最大公约数。 * @param a * @param b * @return */ public static long gY(long a, long b) { long r = 1; if(a < b) { long t = a; a = b; b = t; } r = a % b; while( r != 0) { long t = r; r = b % r; b = t; } return b; } /** * 求公倍数 * @param a * @param b * @return */ public static long gB(long a, long b) { long gb = 0; gb = a * b / gY(a, b); return gb; } } package com.gzitc.exam; public class FractionUtil { /** * 加法运算 * @param fraction1 * @param fraction2 * @return */ public static Fraction plus(Fraction a,Fraction b) { long r_mum = MathUtil.gB(a.getMum(), b.getMum()); long r_sun = a.getSun() * r_mum / a.getMum() + b.getSun() * r_mum / b.getMum(); return new Fraction(r_sun, r_mum); } /** * 减法运算 * @param a * @param b * @return */ public static Fraction minus(Fraction a,Fraction b) { long r_mum = MathUtil.gB(a.getMum(), b.getMum()); long r_sun = a.getSun() * r_mum / a.getMum() - b.getSun() * r_mum / b.getMum(); return new Fraction(r_sun, r_mum); } /** * 乘法运算 * @param a * @param b * @return */ public static Fraction multiplied(Fraction a,Fraction b) { long r_sun = a.getSun() * b.getSun(); long r_mum = a.getMum() * b.getMum(); Fraction r_fraction = new Fraction(r_sun, r_mum); return r_fraction; } /** * 除法运算 * @param a * @param b * @return */ public static Fraction divided(Fraction a,Fraction b) { long r_sun = a.getSun() * b.getMum(); long r_mum = a.getMum() * b.getSun(); Fraction r_fraction = new Fraction(r_sun, r_mum); return r_fraction; } /** * 对分数数组从小到大进行排序 * @param arr * @return */ public static void sort(Fraction arr[]) { int length = arr.length; //冒泡排序 for(int i = 0; i < length-1; i++) { for(int j = i; j < length; j++) { //判断减运算得到新的分数是否大于0,如果大于0,说明arr[i]大于arr[j],调换位置。 if(FractionUtil.minus(arr[i], arr[j]).isUpZero() > 0) { Fraction temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } } package com.gzitc.exam; public class Test { public static void main(String args[]) { Fraction a,b; a = new Fraction(5,7); b = new Fraction(3,7); Fraction arr[] = {new Fraction(1,2), new Fraction(2,3), new Fraction(48,62), new Fraction(70,20), new Fraction(9,25)}; System.out.println(a+"+"+b+"="+FractionUtil.plus(a, b)); System.out.println(a+"-"+b+"="+FractionUtil.minus(a, b)); System.out.println(a+"*"+b+"="+FractionUtil.multiplied(a, b)); System.out.println("("+a+")/("+b+")="+FractionUtil.divided(a, b)); System.out.print("数组:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } System.out.print(",从小到大的排序结果为:"); //调用排序的方法 FractionUtil.sort(arr); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" , "); } } }