• 算法-第四版-练习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 数据抽象-习题索引汇总

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

  • 相关阅读:
    docker 修改 bridge网桥网段
    redis 主从 哨兵
    rc.local 启动内容不生效
    bat脚本 定时删除备份的文件
    地址ip丢失
    rabbit MQ 消息队列
    maven mvn 安装介绍
    NodeJS 介绍安装
    ssh
    tomcat增加内存 JVM内存调优
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710213.html
Copyright © 2020-2023  润新知