【蓝桥杯】_05有理数类

package java2013B;

/**
 * @Author bennyrhys
 * @Date 2020-03-11 22:07
 *
有理数就是可以表示为两个整数的比值的数字。一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数。

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

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 class _05有理数类 {

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

    static 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(this.ra * x.rb + this.rb * x.ra, this.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;
        }
    }
}

文末福利

对了对了,文末发波福利

  1. 通过公众号提示的关键字可以领取竞赛资料。但是,有时候会失效,小伙伴可以在后台留言提醒我修复。

  2. 最后一波分享一些很有意义的开源干货

蓝桥杯必刷真题:https://github.com/bennyrhys/LanQiao
求职必备刷题官网:https://github.com/bennyrhys/interview
SpringBoot两小时快速入门,极客表白浪漫红包程序
https://github.com/bennyrhys/LuckyMoney-SpringBootProject
SpringBoot两小时快速入门,基因芯片个人信息程序
https://github.com/bennyrhys/Girl-SpringBootProject
SpringBoot之web进阶,人类基因芯片程序-提升篇
https://github.com/bennyrhys/GirlPlus-SpringBootProject

小伙伴的支持是我坚持的动力,动动小手,点点(关注、

相关推荐:

P8618 [蓝桥杯 2014 国 B] Log 大侠

简要题意 给你一个长度为\(n\)的正整数序列\(a\),有\(m\)个询问,每一个询问给出一个区间\([l,r]\)。定义函数\(f(x)=\lfloor\log_{2}(x)+1\rfloor\)。将\([l,r]\)的所有元素\(a_p\)修改为\(f(a_p)\)。然后输出序列\(a\)的全...

2021年第十二届蓝桥杯javaA组省赛部分题目

试题D:路径 本题总分:10分 【问题描述】 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。 小蓝的图由2021个结点组成,依次编号1至2021。 对于两个不同的结点a,b,如果a和b的差的绝对值大于21,则两个结点 之间没有边相连;如果a和b的差的绝对值小于等于2...

Java实现 蓝桥杯VIP 算法提高 快速幂

算法提高快速幂 时间限制:1.0s内存限制:256.0MB 问题描述   给定A,B,P,求(A^B)modP。 输入格式   输入共一行。   第一行有三个数,N,M,P。 输出格式   输出共一行,表示所求。 样例输入 253 样例输出 2 数据规模和约定   共10组数据   对100%的数据...

Java实现 蓝桥杯 算法提高 摩尔斯电码

算法提高9-3摩尔斯电码 时间限制:1.0s内存限制:256.0MB 提交此题 问题描述   摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用’*‘表示’.‘,中间空格用’|'表示,只转化字符表。 摩尔斯码定义见:h...

算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)

目录 1问题描述 2解决方案   1问题描述 问题描述   摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用'*'表示'.',中间空格用'|'表示,只转化字符表。   摩尔斯码定义见:http://baik...

[蓝桥杯2017初赛]包子凑数

 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐。这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子 每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买X个包子,卖包子的大叔就会选出若干笼包子来,使得这若干笼中恰好一共有X个包子。 比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买...

第八届蓝桥杯 包子凑数

标题:包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子...

蓝桥杯单片机——独立按键、矩阵按键

蓝桥杯单片机硬件基础 独立按键 跳线帽需要短接J5口的3和2引脚,按键能使用的仅有第一列(即上图中S4、S5、S6、S7)。当按键按下时,相应的P30-33口输入为低电平,由此编写独立按键扫描函数。 矩阵按键 跳线帽需要短接J5口的1和2引脚,按键能使用16个(即上图中S4-S19)。矩阵按键的扫描...