以扩展形式写入数字 - 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不打印零的主要内容,如果未能解决你的问题,请参考以下文章

第九十四章 SQL函数 %MINUS

以科学计数法打印 cpp_dec_float,不带尾随零

程序不起作用(前导零)

python 根据给定的年月日以数字的形式打印出日期

Ruby:文件大小不会随着以数字开头的句子而更新

将数字写入文件python。第一个输入不打印