有理数
-
有理数就是可以表示为两个整数的比值的数字。
-
一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数,也就是
以分数的形式
。 -
这时,我们可以建立一个“有理数类”,下面的代码初步实现了这个目标。为了简明它只提供了加法和乘法运算,请完成填空~
// 加法
public Rational add(Rational x){
return __________________________; // 填空部分
}
一、步骤解析
运算符 /
:除法运算符,并且运算结果遵从向下取整。
运算符 %
:模运算,
(1)当运算符左边小于右边,结果就等于左边;
(2)当运算符左边大于右边,结果就和算术中的取余是一样的效果。
① 整体流程
最主要的步骤就是求取公约数,实现最后结果的化简,这里采用了递归取模的方式进行
。
返回顶部
② add()
二、完整代码
public class Test03_有理数 {
public static void main(String[] args) {
Rational a = new Rational(1,2);
Rational b = new Rational(1,4);
Rational c = a.add(b);
System.out.println(a + "+" + b + "=" + c );
}
static class Rational {
private long ra; // 分子
private long rb; // 分母
// 求最大公约数
private long gcb(long a,long b){
if (b==0){
return a;
}
return gcb(b,a % b);
}
public Rational(long a,long b){
ra = a;
rb = b;
long k = gcb(ra,rb);
if (k>1){
ra/=k; // ra = 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;
}
}
}