我们怎样才能有效地计算Elixir中整数的数字?

时间:2015-06-17 18:32:18

标签: count elixir digits

我们怎样才能有效地计算Elixir中整数的数字?

我在Iex的尝试

iex(1)> a=100_000                                               
100000
iex(2)> Enum.reduce(1..a, &(&1*&2))|> to_string|> String.length
456574
iex(3)> 

结束 15秒

另一项实施:

defmodule Demo do
    def cnt(n), do: _cnt(n,0)
    defp _cnt(0,a), do: a
    defp _cnt(n,a),do: _cnt(div(n,10),a+1)
end

慢一点:b = 100_000!

评论中的建议(感谢Fred!)

iex> Integer.to_char_list(b) |> length

最好也是最简单的

IEx> :timer.tc(fn -> Demo.cnt b  end)
{277662000, 456574}
IEx> :timer.tc(fn ->b |> to_string |> String.length end) 
{29170000, 456574}

在任何Elixir模块中是否内置 wizardry

1 个答案:

答案 0 :(得分:0)

从Elixir 1.1及以上版本中,现在有一个内置功能

Integer.digits/2

这有效地处理数字计数