count - 我们如何有效地计算 Elixir 中整数的位数?

标签 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

最佳答案

从 Elixir 1.1 及更高版本开始,现在有一个内置功能

Integer.digits/2

这有效地处理了数字计数

关于count - 我们如何有效地计算 Elixir 中整数的位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899611/

相关文章:

elixir - Ecto - 无法删除自定义命名的唯一索引

elixir - UndefinedFunctionError - phoenix/ecto 中的 iex 别名

elasticsearch - 按最后一分钟和事件级别获取事件计数

Elixir 未定义函数

mysql - Rails mysql - 1 个查询中有 2 个计数

c - 有没有更有效的方法将数字拆分成数字?

javascript - 多位数计数器

用于 Javascript 正则表达式和数字的 Javascript 正则表达式

Excel COUNTIF 单元格包含给定文本(部分匹配)

mysql - SQL中如何统计多列出现的次数