Java藍橋杯14年第五題

小小禿頭你快樂發表於2020-10-06

Java有理數類

有理數就是可以表示為兩個整數的比值的數字。一般情況下,我們用近似的小數表示。但有些
時候,不允許出現誤差,必須用兩個整數來表示一個有理數。

這時,我們可以建立一個“有理數類”,下面的程式碼初步實現了這個目標。為了簡明,它只提
供了加法和乘法運算。

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

public static void main(String[] args) {
		// TODO Auto-generated method stub
		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(x.ra * rb + ra * x.rb, x.rb * 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;
	}

相關文章