📜  红宝石 |有理 ceil()函数(1)

📅  最后修改于: 2023-12-03 15:41:13.149000             🧑  作者: Mango

红宝石 | 有理 ceil() 函数

在 Ruby 中,提供了一种非常方便的向上取整函数 ceil(),可以将一个浮点数向上取整为最接近的整数。但是,在处理分数或有理数时,我们需要一个能够向上取整得到正确的有理数的函数,这就是 ceil() 函数。

实现

在 Ruby 中,提供了一个 Rational 类用于处理有理数。通过 Rational 类,我们可以将一个分数表示为一个分子和分母的有理数。

为了实现 ceil() 函数,我们需要判断分子和分母之间的大小关系,然后按照分子和分母的符号进行处理。

在 Ruby 中,我们可以使用以下代码来实现 Rational#ceil 函数:

class Rational
  def ceil()
    if self.numerator >= 0 && self.denominator > 0 || 
       self.numerator <= 0 && self.denominator < 0
      # 分子分母同号,直接向上取整
      return Rational((self.numerator + self.denominator - 1) / self.denominator, 1)
    else
      # 分子分母异号,先向下取整再取相反数
      return -((-self).floor)
    end
  end
end

这段代码中,我们先判断了分子和分母的符号,然后分别进行了不同的处理。如果分子和分母同号,就可以直接使用 (n + d - 1) / d 的方式向上取整;如果分子和分母异号,就需要先将有理数取反,然后再先向下取整,最后再取反即可。

使用

使用 Rational#ceil 函数非常简单,我们只需要新建一个有理数对象,然后就可以调用 ceil 函数获取向上取整之后的有理数了。

# 声明有理数
a = Rational(5, 3)
b = Rational(-5, 3)

# 向上取整
puts a.ceil   # 输出 2/1
puts b.ceil   # 输出 -1/1

这段代码中,我们先新建了两个有理数对象 ab,然后分别调用了 ceil 函数,并输出了结果。

总结

在 Ruby 中,有理数是一种强大而方便的工具。通过自定义 Rational#ceil 函数,我们可以实现对有理数的向上取整操作,并获取正确的有理数结果。