如何计算Ruby中数字的阶乘?

时间:2014-02-01 20:12:16

标签: ruby if-statement for-loop syntax factorial

好吧,所以我先问了一个关于语法错误的问题。我摆脱了错误,但程序没有按照预期的方式完成。我的数学错误,并没有找到尾随零的数量。这是我的代码:

num = " "
a = 0
sumOfFact = 1

def factorial
    num = gets.to_i
    a = num
    (1..num).each do |a|
        if a != 1
            sumOfFact *= a
            a -= 1
        else
            break
        end
    end
end

for c in 1..sumOfFact
    if sumOfFact / c == 10
            zeros += 1
    end
end

factorial()
puts sumOfFact
puts zeros

4 个答案:

答案 0 :(得分:2)

嗯,首先,你应该在你的方法之外进行。你的方法应该接受一个参数。第二,为什么你需要这个条件?

您希望从1到n的乘法得到阶乘。你应该开始这样做:

def factorial(n)
  total = 1
  (1..n).each do |n|
    total *= n   
  end
  total
end

puts factorial(gets.to_i)

接下来是注入的阶乘,以防您想学习新语法: - )

def factorial(n)
  n == 0? 1 : (1..n).inject(1) { |total, i| total*= i; total }
end

puts factorial(gets.to_i)

正如@pjs在下面评论的那样,这是一种做基因的美妙方式!

def factorial(n)
  n == 0? 1 : (1..n).inject(:*)
end

最后的改进:

def factorial(n)
  (1..n).inject(1, :*)
end

答案 1 :(得分:1)

假设n是一个非负整数,您可以定义一个计算阶乘的方法:

def factorial(n)
  tot = 1
  (1..n).each do |n|
    tot *= x
  end

  tot
end

其用法示例:

puts factorial(0) # 1 
puts factorial(1) # 1
puts factorial(2) # 2 
puts factorial(3) # 6
puts factorial(4) # 24
puts factorial(5) # 120 

如果您不想阅读用户输入,请按以下方式调用:

puts 'Type the non-negative integer:'
n = gets.to_i
puts factorial(n)

答案 2 :(得分:0)

class Factorial
   attr_reader :num
   def initialize(num)
      @num = num
   end

   def find_factorial
      (1..num).inject(:*) || 1
   end
end

number = Factorial.new(8).find_factorial
puts number

或者你可以简单地写一下:

 (1..num).inject(:*) || 1

答案 3 :(得分:0)

试试这个。希望这可以帮助任何人以某种方式解决同样的问题。

查找任意数字的阶乘的方法:

def factorial(number)
    for i in 1...number do
        number *= i
    end
    number
end

puts factorial(5)