有理数就是可以表示为两个整数的比值的数字。一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数。
这时,我们可以建立一个 “有理数类”,下面的代码初步实现了这个目标。为了简明,它只提供了加法和乘法运算。
- class Rational {
- private long ra;
- private long rb;
-
- private long gcd(long a, long b) {
- if(b == 0) return a;
- return gcd(b, a % b);
- }
- public Rational(long a, long b) {
- ra = a;
- rb = b;
- long k = gcd(ra, rb);
- if(k > 1) { //需要约分
- ra /= k;
- rb /= k;
- }
- }
- // 加法
- public Rational add(Rational x) {
- return ________________________________________; //填空位置
- }
- // 乘法
- public Rational mul(Rational x) {
- return new Rational(ra*x.ra, rb*x.rb);
- }
- public String toString() {
- if(rb == 1) return "" + ra;
- return ra + "/" + rb;
- }
- }
使用该类的示例:
- Rational a = new Rational(1,3);
- Rational b = new Rational(1,6);
- Rational c = a.add(b);
- System.out.println(a + "+" + b + "=" + c);
- class Rational {
- private long ra;
- private long rb;
-
- private long gcd(long a, long b) {
- if (b == 0)
- return a;
- return gcd(b, a % b);
- }
-
- public Rational(long a, long b) {
- ra = a;
- rb = b;
- long k = gcd(ra, rb);
- if (k > 1) { // 需要约分
- ra /= k;
- rb /= k;
- }
- }
-
- // 加法
- public Rational add(Rational x) {
- return new Rational(ra * x.rb + x.ra * rb, rb * x.rb); // 填空位置
- }
-
- // 乘法
- public Rational mul(Rational x) {
- return new Rational(ra * x.ra, rb * x.rb);
- }
-
- public String toString() {
- if (rb == 1)
- return "" + ra;
- return ra + "/" + rb;
- }
- }
-
- public class Main {
-
- public static void main(String[] args) {
- Rational a = new Rational(1, 3);
- Rational b = new Rational(1, 6);
- Rational c = a.add(b);
- System.out.println(a + "+" + b + "=" + c);
- }
- }