【2013 省赛试题】有理数



有理数

  • 有理数就是可以表示为两个整数的比值的数字。

  • 一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数,也就是以分数的形式

  • 这时,我们可以建立一个“有理数类”,下面的代码初步实现了这个目标。为了简明它只提供了加法和乘法运算,请完成填空~

// 加法
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;
        }
    }
}

在这里插入图片描述

返回顶部


猜你喜欢

转载自blog.csdn.net/qq_45797116/article/details/113760271