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)
您正在寻找的是模幂。它由 ruby 支持,但有点隐藏在文档中;只是 Integer 的pow的一个额外选项。
def last_digit(n1, n2)
n1.pow(n2, 10)
end
Run Code Online (Sandbox Code Playgroud)