我希望我的n
与下一个数字相乘,例如,如果n = 99,我希望它为9 * 9,然后返回结果,然后我想要结果(9 * 9 = 81然后8 * 1 = 8)乘以它变为1位数。
这是我的代码:
def persistence(n)
if n <= 9
puts n
else
n.to_s.each_char do |a|
a.to_i * a.to_i unless n < 9
puts a.to_i
end
end
end
我想让它归还:
persistence(39) # returns 3, because 3*9=27, 2*7=14, 1*4=4
# and 4 has only one digit
persistence(999) # returns 4, because 9*9*9=729, 7*2*9=126,
# 1*2*6=12, and finally 1*2=2
persistence(4) # returns 0, because 4 is already a one-digit number
答案 0 :(得分:1)
def persistence(n)
i = 0
while n.to_s.length != 1
n = n.to_s.each_char.map(&:to_i).reduce(:*)
i +=1
end
i
end
persistence(39) #=> 3
persistence(999) #=> 4
其他版本:
def p(n, acc)
return acc if n <= 9
p(n.to_s.each_char.map(&:to_i).reduce(:*), acc+1)
end
def persistence(n)
p(n, 0)
end
我会留下方法的分解并理解正在发生的事情,以及与您的两种变化有什么区别。很乐意看到你的评论解释它。
答案 1 :(得分:0)
def persistence(n)
0.step.each do |i|
break i if n < 10
n = n.digits.reduce(:*)
end
end
persistence 4 #=> 0
persistence 39 #=> 3
persistence 999 #=> 4
persistence 123456789123456789 #=> 2
关于最后的结果,请注意2*5*2*5 #=> 100
。