Мне нужно написать код, который может идентифицировать Сильное число.
Сильное число - это число, в котором сумма факториала его цифр равна самому числу.
Например: 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!!!!"