• 有理数类 Java


    public class Rational extends Number implements Comparable {

    private long numerator;// 分子
    private long denominator;// 分母

    /**
    * @param args
    */
    public static void main(String[] args) {

    // TODO Auto-generated method stub
    Rational rational1 = new Rational(1, 10);
    Rational rational2 = new Rational(1, -10);
    System.out.println(rational1.add(rational2));
    System.out.println(rational1.subtract(rational2));
    System.out.println(rational1.multiple(rational2));
    System.out.println(rational1.divide(rational2));
    }

    public Rational() {

    // TODO Auto-generated constructor stub
    this(0, 1);

    }

    public Rational(long numerator, long denominator) {

    long gcd = gcd(numerator, denominator);
    this.numerator = (denominator > 0 ? 1 : -1) * numerator / gcd;
    this.denominator = Math.abs(denominator) / gcd;
    }

    public static long gcd(long a, long b) {

    long n1 = Math.abs(a);
    long n2 = Math.abs(b);
    long remainder = n1 % n2;
    while (remainder > 0) {
    n1 = n2;
    n2 = remainder;
    remainder = n1 % n2;
    }
    return n2;
    }

    public long getNumerator() {

    return numerator;
    }

    public long getDenominator() {

    return denominator;
    }

    public Rational add(Rational secondRational) {

    long n = numerator * secondRational.getDenominator() + denominator
    * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
    }

    public Rational subtract(Rational secondRational) {

    long n = numerator * secondRational.getDenominator() - denominator
    * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
    }

    public Rational multiple(Rational secondRational) {

    long n = numerator * secondRational.getNumerator();
    long d = denominator * secondRational.getDenominator();
    return new Rational(n, d);
    }

    public Rational divide(Rational secondRational) {

    long n = numerator * secondRational.getDenominator();
    long d = denominator * secondRational.getNumerator();
    return new Rational(n, d);
    }

    @Override
    public boolean equals(Object obj) {

    // TODO Auto-generated method stub
    if (this.subtract((Rational) obj).getNumerator() == 0) {
    return true;
    }
    else {
    return false;
    }
    }

    @Override
    public String toString() {

    // TODO Auto-generated method stub
    if (denominator == 1) {
    return String.valueOf(numerator);
    }
    else {
    return numerator + "/" + denominator;
    }
    }

    @Override
    public int intValue() {

    // TODO Auto-generated method stub
    return (int) doubleValue();
    }

    @Override
    public long longValue() {

    // TODO Auto-generated method stub
    return (long) doubleValue();
    }

    @Override
    public float floatValue() {

    // TODO Auto-generated method stub
    return (float) doubleValue();
    }

    @Override
    public double doubleValue() {

    // TODO Auto-generated method stub
    return numerator * 1.0 / denominator;
    }

    @Override
    public int compareTo(Object o) {

    // TODO Auto-generated method stub
    if (this.subtract((Rational) o).getNumerator() > 0) {
    return 1;
    }
    else if (this.subtract((Rational) o).getNumerator() < 0) {
    return -1;
    }
    else {
    return 0;
    }
    }
    }

  • 相关阅读:
    安装pyamf碰到的问题及其解决方法^_^(原创)
    django建立模型的一些体会(原创)
    终于搞完第三个作业了~~
    django传递嵌套对象给flex前端的方法(原创)
    flex:在一个.as文件中调用另一个.as文件的public函数(原创)
    hdu(4339)树状数组+二分查找
    1504: ZZ的橱柜(长沙理工oj)
    zoj(2110)Tempter of the Bone(DFS+奇偶剪枝)
    hdu(4267)A Simple Problem with Integers(三维树状数组)
    [USACO 1.5.3]特殊的质数肋骨
  • 原文地址:https://www.cnblogs.com/diyishijian/p/5023950.html
Copyright © 2020-2023  润新知