Ruby:如何将多个数字相乘?

时间:2013-02-23 19:46:58

标签: ruby math

我试图将任意数量的未知参数相乘以形成总数。

 def multiply(*num)
  num.each { |i| puts num * num}
  end

multiply(2,3,4)
multiply(2,3,4,5,6,7)

另一次尝试:

def multiply(num)
  num.to_i
   i = 0
   while i < num.length
   total = num * num

    return total
   end
end

multiply(2,3,4)
multiply(2,3,4,5,6,7)

我一直遇到错误: (eval):73:未定义的局部变量或方法`num_'for main:Object(NameError)     来自(评估):81

有人说Array需要是Integer。

我尝试过做一些我认为是非常简单的程序来编写的东西。

3 个答案:

答案 0 :(得分:8)

def multiply(*num)捕获数组中给出方法的所有参数。如果您运行multiply(1, 2, 3, 4),那么num将等于[1, 2, 3, 4]。因此,在您的两次尝试中,您都试图将整个数组与其自身相乘(num * num),这是行不通的。

其他人已经提出了如何正确编写乘法方法的解决方案,但是让我给你一个正确版本的第一次尝试并正确解释:

def multiply(*numbers)
  result = 1
  numbers.each { |n| result = result * n }
  result
end

在你的尝试中我捕获数组中的所有参数,我称之为我的numbers。然后我声明一个变量,它将保存所有乘法的结果。给它1的值很方便,因为它不会影响乘法,但我也可以从numbers数组中移出第一个值,还有其他解决方案。

然后我用each迭代所有数字,并且对于每个数字,我将它与当前结果相乘并将其存储为新结果(我可以用result *= n写出更短的数字)。

最后我返回结果(方法的最后一个值是方法返回的内容)。

有更短的方式做同样的事情,其他人建议使用numbers.reduce { |n, result| n * result },甚至numbers.reduce(:*),但即使它们更短,但它们非常神秘,我认为它们并不是真的帮助你完成工作。

答案 1 :(得分:2)

你想要的是#inject方法

def multiple(*nums)
  nums.inject(:*)
end

def multiple(*nums) nums.inject(:*) end

Inject将使用指定的操作(在本例中为*)组合nums中的所有元素。

答案 2 :(得分:0)

你可以试试这个:

num.reduce(1) {|x, y| x*y }