大数的 Ruby 求幂警告

Mac*_*lie 1 ruby integer infinity

我正在解决 Ruby 中的一个问题。名为last_digit 的函数接受两个整数。然后将第一个整数计算为第二个整数的幂。计算完成后,该函数必须返回该整数的最后一位数字。例如,如果第一个整数是 2,第二个整数是 4,则该函数将执行 2 ** 4,等于 16,然后返回最后一位数字这个数字是 6。

我已经编写了一个 ruby​​ 函数来执行此操作,但一旦数字变得太大,我相信结果默认为无穷大,并且我的函数返回错误答案 0。我的 ide 还会显示以下警告:

warning: in a**b, b may be too big 469Infinity
Run Code Online (Sandbox Code Playgroud)

我的代码和测试用例如下所示:

def last_digit(n1, n2)
  num = n1 ** n2
  if num == 0
    return print 1
  end
  return print num.to_s[-1].to_i
end

last_digit(4, 1)                # returns 4
last_digit(4, 2)                # returns 6
last_digit(9, 7)                # returns 9
last_digit(10, 10 ** 10)        # return 0
last_digit(2 ** 200, 2 ** 300)  # should return 6 but returns 0
Run Code Online (Sandbox Code Playgroud)

请注意,最后两次调用 last_digit 会导致此警告/错误返回。另请注意,如果数字的幂次方结果为 0,则该函数应返回 1,因此忽略行

if num == 0
   return print 1
end
Run Code Online (Sandbox Code Playgroud)

ste*_*lag 8

您正在寻找的是模幂。它由 ruby​​ 支持,但有点隐藏在文档中;只是 Integer 的pow的一个额外选项。

def last_digit(n1, n2)
  n1.pow(n2, 10)
end
Run Code Online (Sandbox Code Playgroud)