正在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
干杯!
答案 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
部分和<<
插入步骤,而该步骤仍未达到您的期望。