强数字标识符(Ruby代码问题)

强数字标识符(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

我需要写一些代码,可以识别一个强大的数字

强数是其数字的阶乘和等于数本身的数

例如:145,自1!+4! + 5! = 1+24+120=145

我一直在试图解决这个问题,但没有结果。谁能告诉我哪里出了问题?我需要“加法器”和“乘法器”变量随着每个循环的增加而增加,这样我可以在方法结束时比较总数,但它们始终默认为零。有人能看出我哪里做错了吗?谢谢

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(:*)
,但为了保持简单,我这样做了。