[Haskell-cafe] How to calculate de number of digits of an integer? (was: Is logBase right?)

Henning Thielemann lemming at henning-thielemann.de
Tue Aug 25 10:11:00 EDT 2009


On Sat, 22 Aug 2009, Bulat Ziganshin wrote:

> Hello Roberto,
>
> Saturday, August 22, 2009, 9:19:26 PM, you wrote:
>
>> I want to calculate the number of digits of a positive integer. I was
>
> fastest way
>
> digits = iterate (`div` 10) >>> takeWhile (>0) >>> length

This needs quadratic time with respect to the number of digits, doesn't 
it? If (show . length) is not fast enough, I would try to catch the 
magnitude by repeated squaring of 10. If you have found a 'k' with
    10^(2^k) <= n < 10^(2^(k+1))
  then you can start to find the exact number of digits with bisection.


More information about the Haskell-Cafe mailing list