zoukankan      html  css  js  c++  java
  • 算法-第四版-练习1.2.16解答

    有理数。为有理数实现一个不可变数据类型Rational,支持加减乘除操作。

    无需测试溢出。

    /**
     * Description : 
     * Author      : mn@furzoom.com
     * Date        : Sep 27, 2016 2:19:35 PM
     * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
     */
    package com.furzoom.lab.algs.ch102;
    
    /**
     * ClassName    : E10216 <br>
     * Function     : TODO ADD FUNCTION. <br>
     * date         : Sep 27, 2016 2:19:35 PM <br>
     * 
     * @version 
     */
    public class E10216
    {
        
        public static void main(String[] args)
        {
            Rational r = new Rational(2, -6);
            System.out.println(r);
            Rational r1 = new Rational(1, 5);
            Rational r2 = new Rational(-1, 15);
            System.out.println(r.plus(r1));
            System.out.println(r.plus(r2).plus(r1));
            System.out.println(r.minus(r1));
            System.out.println(r.times(r1));
            System.out.println(r.divides(r1));
            System.out.println(r.times(r1).equals(r2));
            r = new Rational(0, 2);
            System.out.println(r);
            System.out.println(r.plus(r1));
            
            r1 = new Rational(1, 3);
            r2 = new Rational(2, 3);
            System.out.println(r1.plus(r2));
            
            r1 = new Rational(1, 200000000);
            r2 = new Rational(1, 300000000);
            System.out.println(r1.plus(r2));
            
            r1 = new Rational(1073741789, 20);
            r2 = new Rational(1073741789, 30);
            System.out.println(r1.plus(r2));
            
            
        }
    }
    
    class Rational
    {
        private final long num;
        private final long den;
        
        public Rational(long numerator, long denominator)
        {
            if (denominator == 0)
                throw new RuntimeException("Denominator is zero");
            long g = gcd(numerator, denominator);
            
            if (denominator < 0)
                g = -g;
            
            this.num = numerator / g;
            this.den = denominator / g;
        }
        
        public Rational plus(Rational b)
        {
            long d = den * b.den;
            long n = num * b.den + den * b.num;
            return new Rational(n, d);
        }
        
        public Rational minus(Rational b)
        {
            long d = den * b.den;
            long n = num * b.den - den * b.num;
            return new Rational(n, d);
        }
        
        public Rational times(Rational b)
        {
            return new Rational(num * b.num, den * b.den);
        }
        
        public Rational divides(Rational b)
        {
            return new Rational(num * b.den, den * b.num);
        }
        
        public boolean equals(Rational that)
        {
            if (this == that) return true;
            if (that == null) return false;
            if (this.getClass() != that.getClass()) return false;
            return (num == that.num && den == that.den); 
        }
        
        private static long gcd(long m, long n)
        {
            if (m < 0) m = -m;
            if (n < 0) n = -n;
            if (n == 0) return m;
            return gcd(n, m % n);
        }
        
        public String toString()
        {
            if (this.den == 1)
                return String.format("%d", this.num);
            return String.format("%d/%d", this.num, this.den);
        }
        
    }


    算法-第四版-1.2 数据抽象-习题索引汇总

    算法-第四版习题索引汇总

  • 相关阅读:
    BCP导出导入
    JBehave
    JavaWeb框架的基石
    SWI-Prolog
    面向对象设计三大特性
    android app启动过程(转)
    人,技术与流程(转)
    打破定式,突破屏障,走出自己的创意舒适区(转)
    野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人(转)
    Spring MVC异常处理详解 ExceptionHandler good
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710213.html
Copyright © 2011-2022 走看看