以扩展形式写入数字 - Ruby不打印零
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以扩展形式写入数字 - Ruby不打印零相关的知识,希望对你有一定的参考价值。
在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
我是根据上面列出的例子进行测试的,但是我回来了qazxsw poi,qazxsw poi,qazxsw poi,为什么"1 + 2"
似乎不起作用?
编辑2018年9月11日下午3:03:我修正了上述所有错误,包括删除零,并且正如@iGian指出的那样,.digits方法已经反转了所有数字,我现在拥有的:
"4 + 2"
干杯!
"7 + 3 + 4"
不会转换任何东西,只是迭代,所以each_with_index
的结果被丢弃了。
你需要的是def expanded_form(num)
num.digits.each_with_index.map{| val, idx | val * (10 ** idx)}.select{|x| x != 0}.reverse.join(" + ")
end
这个:
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
由于数字是反向的,我们使用unshift反向构建Array.new
。
由于最终值是<<
无论如何我们使用num.digits.each_with_index.with_object([]) do |(n,i),obj|
obj.unshift("#{n}#{'0' * i}") if n > 0
end.join(" + ")
来添加所需的零,我们根本不会将零添加到Array
中。
以上是关于以扩展形式写入数字 - Ruby不打印零的主要内容,如果未能解决你的问题,请参考以下文章