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

标签 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: main:Object (NameError) 的未定义局部变量或方法“num_” 来自(评估):81

有人说 Array 需要是 Integer。

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

最佳答案

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

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

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(:*),但即使它们更短,它们也很神秘,我认为它们并不能真正帮助你完成工作.

关于Ruby:如何将多个数字相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044834/

相关文章:

algorithm - 如何创建最紧凑的映射 n → isprime(n) 直到限制 N?

从1到n计算5个区间点的算法

ruby - 使用 ruby​​ 应用程序时出现 remove_entry_secure 错误

java - 使用 ssh-net 的 ruby​​ 脚本中的文件路径问题

ruby-on-rails - => 运算符与 = 运算符

algorithm - 子集积和量子计算机,是一个实例可解

math - 比例积分导数中的 I

java - 贝塞尔曲线图 x,y 指向屏幕

ruby-on-rails - 旧版本的 Rails 网站文档

ruby-on-rails - 503 : Instagram is rate limiting your requests