有理数类Rational实例
2015-09-02 20:08
351 查看
public class Rational extends Number implements Comparable { private long numerator=0; private long denominator=1; public Rational() { 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; } private static long gcd(long n,long d) { long n1=Math.abs(n); long n2=Math.abs(d); int gcd=1; for(int k=1;k<=n1&&k<=n2;k++) { if(n1%k==0&&n2%k==0) gcd=k; } return gcd; } 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 multiply(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); } public String toString() { if(denominator==1) { return numerator+""; }else return numerator+"/"+denominator; } public boolean equals(Object parm1) { if((this.subtract((Rational)parm1)).getNumerator()==0) return true; else return false; } @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; } @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 1.0*numerator/denominator; } }
public class TestRationalClass { public static void main(String[] args) { Rational r1=new Rational(4,2); Rational r2=new Rational(2,3); System.out.println(r1+"+"+r2+"="+r1.add(r2)); System.out.println(r1+"-"+r2+"="+r1.subtract(r2)); System.out.println(r1+"*"+r2+"="+r1.multiply(r2)); System.out.println(r1+"/"+r2+"="+r1.divide(r2)); System.out.println(r2+" is "+r2.doubleValue()); } }
相关文章推荐
- Android内存优化(四)-- 分析内存的使用
- sizeof strlen
- 特殊命令eval的用法两例
- 特殊命令eval的用法两例
- 特殊命令eval的用法两例
- Android内存优化(三)-- 分析内存的使用
- 【HNOI2008】【BZOJ1007】水平可见直线
- UVALive 6934 Good morning! 打表判断
- Android内存优化(二)-- 分析内存的使用
- log4j+slf4j+spring(web项目)
- 【转载】注意next()方法和nextLine()方法的连用。
- UML
- tomcat 优化处理
- eclipse和JDK的安装及环境配置
- Android:Exported receiver does not require permission解决办法
- poj 2312 Battle City
- swift之用runtime实现字典转模型
- hihoCoder挑战赛14-1223 不等式
- Java设计模式——工厂模式
- 并查集的简介及其C/C++代码的实现及优化