创建一个FRACTION类,用整型表示是有成员变量 F1和F2,提供构造方法讲F1存入分子,F2存入分母,提供两个分数相加,结果分别存入F1和F2,提供两个分数相减,结果分别存入F1和F2,提供两个分数相乘,结果分别存入F1和F2,提供两个分数相除,结果分别存入F1和F2,,以A/B的形式打印FRACTION数,以浮点数的形式打印,编写java主程序运行分数运算 

解决方案 »

  1.   

    比方加法:a/b + c/d = (ad+bc)/bd
    这规则小学就会吧。求出来之后用辗转相除法求最大公约数就可以化简了。
      

  2.   

    下面是一个例子:public class FractionTest {    public static void main(String[] args) {
            Fraction a = new Fraction(7, 32);
            Fraction b = new Fraction(13, 32);
            System.out.println(a + " + " + b + " = " + a.add(b));
        }
    }// 分数
    class Fraction {
        private int numerator;      // 分子    private int denominator;    // 分母    Fraction(int numerator, int denominator) {
            if (denominator == 0) {
                throw new IllegalArgumentException("分母不能为 0");
            }        this.numerator = numerator;
            this.denominator = denominator;
            shrink();
        }    Fraction() {
            this(0, 1);
        }    public int getNumerator() {
            return numerator;
        }    public void setNumerator(int numerator) {
            this.numerator = numerator;
        }    public int getDenominator() {
            return denominator;
        }    public void setDenominator(int denominator) {
            this.denominator = denominator;
        }    // 分子分母同除以最大公约数
        private Fraction shrink() {
            int maxCommonDivisor = getMaxCommonDivisor(this.denominator, this.numerator);
            this.numerator /= maxCommonDivisor;
            this.denominator /= maxCommonDivisor;
            return this;
        }    // 辗转相除法求最大公约数
        private int getMaxCommonDivisor(int a, int b) {
            int mod = a % b;        if (mod == 0) {
                return b;
            } else {
                return getMaxCommonDivisor(b, mod);
            }
        }    // 分数加法
        public Fraction add(Fraction that) {
            return new Fraction(this.numerator * that.denominator + this.denominator * that.numerator,
                    this.denominator * that.denominator);
        }    // 减法、乘法 和除法在这里补充    @Override
        public String toString() {
            return String.format("{%d/%d}", this.numerator, this.denominator);
        }
    }
      

  3.   


    public class TestApp {
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
    Fraction f1 = new Fraction(1,2);
    Fraction f2 = new Fraction(2,3);
    f1.add(f2);
    System.out.println(f1);
    f1.minus(f2);
    System.out.println(f1);
    f1.multi(f2);
    System.out.println(f1);
    f1.div(f2);
    System.out.println(f1);
    }}class Fraction {
    /**分子*/
    private int f1;
    /**分每*/
    private int f2;
    Fraction(int var1, int var2) {
    f1 = var1;
    f2 = var2;
    }

    /**
     * 加
     * @param value
     * @return
     */
    public Fraction add(Fraction value) {
    int lcm = LCM(f2, value.f2);
    f1 = f1 * lcm / f2 + value.f1 * lcm /value.f2;
    f2 = lcm;
    simpler();
    return this;
    }
    /**
     * 减
     * @param value
     * @return
     */
    public Fraction minus(Fraction value) {
    Fraction temp = new Fraction(value.f1, value.f2 * -1);
    return add(temp);
    }
    /**
     * 乘
     * @param value
     * @return
     */
    public Fraction multi(Fraction value) {
    f1 *= value.f1;
    f2 *= value.f2;
    simpler();
    return this;
    }
    /**
     * 除
     * @param value
     * @return void
     */
    public Fraction div(Fraction value) {
    f1 *= value.f2;
    f2 *= value.f1;
    simpler();
    return this;
    }
    /**
     * 约分
     * return void
     */
    private void simpler() {
    int gcd = GCD(f1, f2);
    f1 /= gcd;
    f2 /= gcd;
    }
    /**
     * 用辗转相除法求最大公约数
     * @param s
     * @param b
     * @return int
     */
    private int GCD(int s, int b) {
    // s-small,b-big
    if (s > b) {
    int temp = s;
    s = b;
    b = temp;
    }
    while (b != 0) {
    int temp = s % b;
    s = b;
    b = temp;
    }
    return s;
    } /**
     * 最小公倍数
     * @param a
     * @param b
     * @return int
     */
    private int LCM(int a, int b) {
    return a * b / GCD(a, b);
    }

    public String toString() {
    return String.valueOf(f1) + "/" + String.valueOf(f2);
    }}