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