有理数

有理数

中等

说明

有理数定义为两个整数a和b的商,分别称为分子和分母,其中b != 0。

有理数r = a/b的绝对值|r|等于|a|/|b|。

两个有理数r₁ = a₁/b₁和r₂ = a₂/b₂的和是r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂)。

两个有理数r₁ = a₁/b₁和r₂ = a₂/b₂的差是r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂)。

两个有理数r₁ = a₁/b₁和r₂ = a₂/b₂的积(乘法)是r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂)。

有理数r₁ = a₁/b₁除以另一个有理数r₂ = a₂/b₂,结果是r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁),前提是a₂不为零。

有理数r = a/b的n次幂(n为非负整数)是r^n = (a^n)/(b^n)。

有理数r = a/b的n次幂(n为负整数)是r^n = (b^m)/(a^m),其中m = |n|。

有理数r = a/b的x次幂(x为实数,即浮点数)是商(a^x)/(b^x),它是一个实数。

实数x的r = a/b次幂是x^(a/b) = root(x^a, b),其中root(p, q)表示p的q次方根。

请实现以下运算:

  • 两个有理数的加法、减法、乘法和除法,
  • 绝对值、给定有理数的整数次幂、给定有理数的实数(浮点数)次幂、实数对有理数的幂运算。

你对有理数的实现应始终约分到最简形式。例如,4/4应约简为1/1,30/60应约简为1/2,12/8应约简为3/2,等等。要约简有理数r = a/b,就用a和b的最大公约数(gcd)去除a和b。例如,gcd(12, 8) = 4,所以r = 12/8可以约简为(12/4)/(8/4) = 3/2。

假设你使用的编程语言没有有理数的实现。

轨道专属说明

  • 本练习将引入运算符重载。关于这个主题,Embarcadero docwiki会对你很有帮助,你可以借此了解如何重写类的运算符,以及Implicit和Explicit类型转换。

来源

Wikipedia链接会在新窗口或新标签页中打开
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Delphi Pascal Exercism

准备好开始 有理数 了吗?

注册 Exercism,借助 76 个练习 和真人导师指导,学习并掌握 Delphi Pascal,全部免费。