# How can I write a function that outputs the number of digits in the input?

I would like to construct a function thats output is equal to the number of digits used to represent the number given as an input.

For example:
$f(5) = 1$
$f(9) = 1$
$f(13) = 2$
$f(99) = 2$
$f(682) = 3$
$f(999) = 3$
$f(9999)= 4$
etc.

Is it even possible with one function and if not, why not?
Can anyone help me with this or at least point me in the right direction?

-
possible duplicate of Checking the digits in an integer –  Isaac May 6 '11 at 4:02
You have essentially defined the function, before you asked whether it is possible to define it. $$f(n)=\lfloor \log_{10}|n|\rfloor+1,$$ given in Listing's answer, is a nice formula for it, but $$f(n)=\text{ the number of digits used to represent }n$$ is a fine definition of a function $f$. –  Jonas Meyer Aug 10 '11 at 7:16

The function is for integers in $\mathbb{Z}$

$D_{10}(n)=\lfloor \log_{10}|n| \rfloor+1$

if $n \neq 0$ and $D_{10}(0):=1$. You can leave the absolute function away if you just want to look at positive integers.

Note that for any base you want you could use

$D_{b}(n)=\lfloor \log_{b}|n| \rfloor+1$

for digits in base b, this is quite nice.

You have to use floor because especially $D_{10}(10)=2$. $\log_{10}n$ is the logarithm to base 10.

-
Yours is better, not to say correct. :-) –  Asaf Karagila May 5 '11 at 8:30
Thanks yes, it is a mistake I also make often :) –  Listing May 5 '11 at 8:31
Thanks, that is a wonderful solution. One question though, what does ":=" mean? –  logicbird May 5 '11 at 8:46
@logicbird: ":=" means 'is defined to be'. In particular, since $\log_{10} 0$ is undefined, you must address that specific input separately. –  Brandon Carter May 5 '11 at 8:49
@Brandon: oh, I see. I figured 0 would need to be handled separately but I was not familiar with that syntax. thanks. –  logicbird May 5 '11 at 8:58