以扩展形式写数字-Ruby不打印零

时间:2018-09-11 18:33:26

标签: ruby methods numbers

正在Codewars上实践此问题:

系统会为您提供一个数字,您需要以扩展形式将其作为字符串返回。例如:

expanded_form(12); # Should return '10 + 2'
expanded_form(42); # Should return '40 + 2'
expanded_form(70304); # Should return '70000 + 300 + 4'

我的代码:

def expanded_form(num)
  arry = Array.new
  arry << num.digits.reverse.each_with_index {|val, idx| val * (10 ** idx)} 
  arry.reverse.join(" + ")
end

我正在根据上面列出的示例对其进行测试,但是我得到了"1 + 2""4 + 2""7 + 3 + 4",为什么each_with_index似乎不起作用? / p>

编辑于2018年9月11日下午3:03: 我修复了上述所有错误,包括删除了零,正如@iGian所指出的那样,.digits方法已经反转了所有数字,这就是我现在所拥有的:

def expanded_form(num)
  num.digits.each_with_index.map{| val, idx | val * (10 ** idx)}.select{|x| x != 0}.reverse.join(" + ")
end

干杯!

1 个答案:

答案 0 :(得分:2)

each_with_index不会进行任何转换,它只会进行迭代,因此val * (10 ** idx)的结果将被丢弃。

您需要做的是map

def expanded_form(num)
  num.digits.reverse.each_with_index.map do |val, idx|
    if (val > 0)
      val * (10 ** idx)
    end
  end.compact.reverse.join(' + ')
end

map返回一个新数组时,您可以跳过整个Array.new部分和<<插入步骤,而该步骤仍未达到您的期望。