实现有理数类(Java)

  1. /*Java中没有提供表示有理数的类。
  2. 有理数类
  3. */
  4. public class Rational {
  5. private long numerator = 0; //分子
  6. private long denominator = 1; //分母
  7. //构造函数
  8. public Rational() {
  9. this(0,1);
  10. }
  11. public Rational(long numerator, long denominator) {
  12. long gcd = gcd(numerator,denominator);
  13. this.numerator= ((denominator>0)? 1 : -1)*numerator / gcd;
  14. this.denominator=Math.abs(denominator)/gcd;
  15. }
  16. //求最大公约数,便于简化有理数
  17. public static long gcd(long n,long d){
  18. long n1=Math.abs(n);
  19. long n2=Math.abs(d);
  20. int gcd=1;
  21. for(int k=1;k<=n1&&k<=n2;k++){
  22. if(n1%k==0&&n2%k==0){
  23. gcd=k;
  24. }
  25. }
  26. return gcd;
  27. }
  28. //生成器
  29. public long getNumerator(){
  30. return numerator;
  31. }
  32. public long getDenominator(){
  33. return denominator;
  34. }
  35. //实现加法
  36. public Rational add(Rational secondRational){
  37. long n=numerator*secondRational.getDenominator()+
  38. denominator*secondRational.getNumerator();
  39. long d=denominator*secondRational.getDenominator();
  40. return new Rational(n,d);
  41. }
  42. //实现减法
  43. public Rational subtract(Rational secondRational){
  44. long n=numerator*secondRational.getDenominator()-
  45. denominator*secondRational.getNumerator();
  46. long d=denominator*secondRational.getDenominator();
  47. return new Rational(n,d);
  48. }
  49. //实现乘法
  50. public Rational multiply(Rational secondRational){
  51. long n=numerator*secondRational.getNumerator();
  52. long d=denominator*secondRational.getDenominator();
  53. return new Rational(n,d);
  54. }
  55. //实现除法
  56. public Rational divide(Rational secondRational){
  57. long n=numerator*secondRational.getDenominator();
  58. long d=denominator*secondRational.numerator;
  59. return new Rational(n,d);
  60. }
  61. //重写toString类
  62. public String toString(){
  63. if(denominator==1){
  64. return numerator+"";
  65. }else{
  66. return numerator+"/"+denominator;
  67. }
  68. }
  69. public boolean equals(Object praml){
  70. if((this.subtract((Rational)(praml))).getNumerator()==0){
  71. return true;
  72. }else{
  73. return false;
  74. }
  75. }
  76. public int intValue(){
  77. return (int)doubleValue();
  78. }
  79. public float floatValue(){
  80. return (float)doubleValue();
  81. }
  82. public double doubleValue(){
  83. return numerator*1.0/denominator;
  84. }
  85. public long longValue(){
  86. return (long)doubleValue();
  87. }
  88. //实现Comparable接口,compare方法
  89. public int compareTo(Object o){
  90. if((this.subtract((Rational)o)).getNumerator()>0){
  91. return 1;
  92. }else{
  93. return 0;
  94. }
  95. }
  96. }

来自为知笔记(Wiz)

时间: 2024-11-08 06:28:24

实现有理数类(Java)的相关文章

有理数类 Java BigInteger实现

import java.math.BigInteger; public class Rational extends Number implements Comparable { private BigInteger numerator;// 分子 private BigInteger denominator;// 分母 /** * @param args */ public static void main(String[] args) { // TODO Auto-generated met

有理数类 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 Rationa

第四届蓝桥杯javaC组_有理数类

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 有理数就是可以表示为两个整数的比值的数字.一般情况下,我们用近似的小数表示.但有些时候,不允许出现误差,必须用两个整数

类 java.util.Scannar方法

类 java.util.Scannar方法 ·Scannar (InputStream ln):用给定的输人流创建一个Scanner对象. ·String nextLlne():读取输入的下一行内容. ·String next():读取输入的下一个单词(以空格作为分隔符). ·int nextint() ·double nextDauble():读取并转换下一个表示整数或浮点数的字符序列. ·boolean hasNext():检测输入中是否还有其它单词. ·boolean hasNextint

加密解密工具类(Java,DES)

一个Java版的DES加密工具类,可以用来进行网络数据传输加密,保存密码的时候进行加密. import java.security.Key; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.I

有理数类

1 public class Rational { 2 3 private int numerator; 4 private int denominator; 5 6 public Rational(int aNumerator, int aDenominator){ 7 int r = gcd(aDenominator, aNumerator); 8 numerator = aNumerator / r; 9 denominator = aDenominator / r; 10 sign();

Java 有理数类 分数类 Rational类的设计与实现

要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等. 1 package chapter14; 2 3 public class Rational extends Number implements Comparable { 4 private long numerator=0; 5 private long denominator=1; 6 7 public Rational(){ 8 this(0,1); 9 } 10 publi

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

二维码生成工具类java版

注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.a