如何在它们之间乘以整数?

时间:2017-09-14 16:34:22

标签: ruby

我希望我的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

2 个答案:

答案 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