有理数类


 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();
11 }
12
13 private static int gcd(int a, int b){
14 if(b == 0){
15 return a;
16 }
17 else{
18 return gcd(b, a % b);
19 }
20 }
21
22 private void sign(){
23 if(denominator < 0){
24 numerator = -numerator;
25 denominator = -denominator;
26 }
27 }
28
29 public Rational plus(Rational b){
30 int d = this.denominator * b.denominator;
31 int n = this.numerator * b.denominator + b.numerator * this.denominator;
32 return new Rational(n, d);
33 }
34
35 public Rational minus(Rational b){
36 int d = this.denominator * b.denominator;
37 int n = this.numerator * b.denominator - b.numerator * this.denominator;
38 return new Rational(n, d);
39 }
40
41 public Rational times(Rational b){
42 int d = this.denominator * b.denominator;
43 int n = this.numerator * b.numerator;
44 return new Rational(n, d);
45 }
46
47 public Rational divides(Rational b){
48 return times(new Rational(b.denominator, b.numerator));
49 }
50
51 public boolean equals(Object b){
52 if(this == b)return true;
53 if(b == null)return false;
54 if(this.getClass() != b.getClass())return false;
55
56 Rational that = (Rational)b;
57 if(this.numerator == that.numerator && this.denominator == that.denominator)return true;
58 return false;
59 }
60
61 public String toString(){
62 return this.numerator + "/" + this.denominator;
63 }
64
65 public static void main(String[] args) {
66 Rational a = new Rational(8, 30);
67 Rational b = new Rational(32, 40);
68 System.out.println("a = " + a);
69 System.out.println("b = " + b);
70 System.out.println("a + b = " + a.plus(b));
71 System.out.println("a - b = " + a.minus(b));
72 System.out.println("b - a = " + b.minus(a));
73 System.out.println("a * b = " + a.times(b));
74 System.out.println("a / b = " + a.divides(b));
75 System.out.println("b / a = " + b.divides(a));
76 System.out.println("a == b? " + (a.equals(b) == true? "true":"false"));
77 }
78
79 }

有理数类

时间: 2024-10-01 22:20:28

有理数类的相关文章

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

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

实现有理数类(Java)

/*Java中没有提供表示有理数的类. 有理数类 */ public class Rational { private long numerator = 0; //分子 private long denominator = 1; //分母 //构造函数 public Rational() { this(0,1); } public Rational(long numerator, long denominator) { long gcd = gcd(numerator,denominator);

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 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

「恢复训练」一个有理数类

难得又写一次代码,距离上一次已经有半年左右了吧. 虽然误打误撞进了数学系,但果然还是喜欢Coding的感觉. 恢复训练 连右值须为const引用,=须重载为成员函数都忘了. R.I.P. 程序清单: Rational.h 1 /* 2 * Rational.h 3 * 4 * Created on: 2014年11月22日 5 * Author: suncc 6 */ 7 #include<iostream> 8 9 #ifndef RATIONAL_H_ 10 #define RATIONA

类和对象描述符

@staticmethod 在类里面给函数添加静态方法,用法详见有理数类,此方法使用于定义在类里面的函数,它所描述的方法应该是在类里面定义的一个非实例方法,这个方法只使用于这个类,所以不应该被定义为全局函数 @abc.abstractstaticmethod 此描述符需要用到abc模块,应用场景为自定义一个父类,需要将其子类的方法全部必须要有父类的方法且一模一样 将父类变成抽象类,需要用到abc模块, 用法如下 ? # 抽象类 # 父类要限制 # 1:子类必须要有父类的方法 # 2:子类实现的方

第五届蓝桥杯全国软件设计大赛--2013年校内选拔赛Java题目

第五届蓝桥杯全国软件设计大赛 2013年校内选拔赛Java题目 一.考生注意: (1)[结果填空题]要求参赛选手根据题目描述直接填写结果.求解方式不限.不要求源代码. 把答案存入[考生文件夹]下对应题号的文件中即可. (2)[代码填空题]要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确.完整.所填写的代码不超过一条语句(即中间不能出现分号). 把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入[考生文件夹]下对应题号的文件中中即可. (3)[编程题]要求选手设计

C++基础和STL,Effective C++笔记

C++基础 static static变量存储在静态数据区 相对于function:在函数内,变量,内存只被分配一次,多次调用值相同 相对于其他模块(.c文件):变量和函数,不能被模块外其他函数访问(private) 相对于类:类中的static变量和函数属于整个类,而不是对象 全局变量 VS 全局静态变量 若程序由一个源文件构成时,全局变量与全局静态变量没有区别. 若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该