强数字标识符(Ruby代码问题)
我需要写一些代码,可以识别一个强大的数字 强数是其数字的阶乘和等于数本身的数 例如:145,自1!+4! + 5! = 1+24+120=145 我一直在试图解决这个问题,但没有结果。谁能告诉我哪里出了问题?我需要“加法器”和“乘法器”变量随着每个循环的增加而增加,这样我可以在方法结束时比较总数,但它们始终默认为零。有人能看出我哪里做错了吗?谢谢强数字标识符(Ruby代码问题),ruby,Ruby,我需要写一些代码,可以识别一个强大的数字 强数是其数字的阶乘和等于数本身的数 例如:145,自1!+4! + 5! = 1+24+120=145 我一直在试图解决这个问题,但没有结果。谁能告诉我哪里出了问题?我需要“加法器”和“乘法器”变量随着每个循环的增加而增加,这样我可以在方法结束时比较总数,但它们始终默认为零。有人能看出我哪里做错了吗?谢谢 def strong_num(n) digits=n.divmod(1) multiplier=1 adder=0 digits.e
def strong_num(n)
digits=n.divmod(1)
multiplier=1
adder=0
digits.each do |digit|
x=digit
digit-1.times do
multiplier=multiplier*x
adder=adder+multiplier
x=x-1
end
end
if n==adder
return "STRONG!!!!"
else
return "Not Strong !!"
end
end
样本输入:
Test.assert_equals(strong_num(1) , "STRONG!!!!")
Test.assert_equals(strong_num(2) , "STRONG!!!!")
Test.assert_equals(strong_num(7) , "Not Strong !!")
Test.assert_equals(strong_num(93) , "Not Strong !!")
Test.assert_equals(strong_num(145), "STRONG!!!!")
Test.assert_equals(strong_num(185), "Not Strong !!")
样本输出:
Test Passed: Value == "STRONG!!!!"
Test Passed: Value == "STRONG!!!!"
Expected: "Not Strong !!", instead got: "STRONG!!!!"
Expected: "Not Strong !!", instead got: "STRONG!!!!"
Test Passed: Value == "STRONG!!!!"
Expected: "Not Strong !!", instead got: "STRONG!!!!"
Test Passed: Value == "STRONG!!!!"
Expected: "Not Strong !!", instead got: "STRONG!!!!"
希望这有帮助!
我试图通过将代码分解成碎片来减少代码
输入:145
def method_name(num)
array = num.to_s.chars.map(&:to_i) # => [1,4,5]
fact_arr = array.map {|f| fact(f)} # => [1, 24, 120]
if (num == fact_arr.inject(:+))
return "STRONG!!"
else
return "NOT STRONG!!"
end
end
def fact(n)
if (n == 0)
1
else
n * fact(n-1)
end
end
希望这有帮助!
我试图通过将代码分解成碎片来减少代码
输入:145
def method_name(num)
array = num.to_s.chars.map(&:to_i) # => [1,4,5]
fact_arr = array.map {|f| fact(f)} # => [1, 24, 120]
if (num == fact_arr.inject(:+))
return "STRONG!!"
else
return "NOT STRONG!!"
end
end
def fact(n)
if (n == 0)
1
else
n * fact(n-1)
end
end
k.divmod(n)
返回一个数组=[k/n除法的前一部分,k/n除法的其余部分]。示例:145.divmod(1)
返回=>[145,0]
。此外,代码中的digit-1.times
应该是(digit-1.times
我认为可以这样做:
def是否强?(编号)
结果=0
数字=数字到字符映射(&:to_i)
幂={0=>1,1=>1,2=>2,3=>6,4=>24,5=>120,6=>760,7=>5040,8=>40320,9=>362880}
数字。每个都有|
结果+=幂[n]
结束
返回(结果==数字)
结束
k.divmod(n)
返回一个数组=[除法(k/n)的前一个除法,其余的除法(k/n)]。示例:145.divmod(1)
返回=>[145,0]
。此外,代码中的digit-1.times
应该是(digit-1.times
我认为可以这样做:
def是否强?(编号)
结果=0
数字=数字到字符映射(&:to_i)
幂={0=>1,1=>1,2=>2,3=>6,4=>24,5=>120,6=>760,7=>5040,8=>40320,9=>362880}
数字。每个都有|
结果+=幂[n]
结束
返回(结果==数字)
结束
您可以发布一些示例输入和预期输出吗?注意:digit-1.times do
不做您认为它做的事情。另外n.divmod(1)
不返回数字的数字。您可以编辑“strong”的定义吗数字?您可以发布一些示例输入和预期输出吗?注意:digit-1.times do
不做您认为它做的事情。另外n.divmod(1)
不返回数字的数字。您可以编辑“强”数字的定义吗?这是一种非常低效的计算阶乘的方法,顺便说一句,即使启用了尾部调用优化,这个函数也不是尾部递归的。事实上,根本不需要担心递归。一个简单的(1..n).reduce(:*)
就足够了。我曾想过number.downto(1).inject(:*)
,但为了保持简单,我这样做了。顺便说一句,这是一种非常低效的计算阶乘的方法。即使启用了尾部调用优化,这个函数也不是尾部递归的。事实上,根本不需要递归。一个简单的(1..n)。reduce(:*)
就足够了。我曾想过number.downto(1)。injection(:*)
,但为了保持简单,我这样做了。