## Counting Zeros

### January 7, 2014

I’m not sure of the original source of today’s exercise; it feels like a Project Euler exercise — it’s mathy, it admits a simple but slow brute-force solution, and it also has a smart, fast solution — but I can’t find it there.

For a given n, count the total number of zeros in the decimal representation of the positive integers less than or equal to n. For instance, there are 11 zeros in the decimal representations of the numbers less than or equal to 100, in the numbers 10, 20, 30, 40, 50, 60, 70, 80, 90, and twice in the number 100. Expect n to be as large as 1010,000.

Your task is to write a program to count zeros. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.

Pages: 1 2

### 5 Responses to “Counting Zeros”

1. Sam said

Never mind that; it doesn’t work perfectly. I’ll fix it up.

2. Paul said

In Python. Method is from here.

```def number_of_zeros(n):
Z = N = F = 0
for sdigit in str(n):
digit = int(sdigit)
F = 10 * F + N - Z * (9 - digit)
if digit == 0:
Z += 1
N = 10 * N + digit
return F
```
3. joey said

(define (count-one n)
(cond ((= n 0) 1)
((< n 10) 0)
(else
(+ (count-one (mod n 10))
(count-one (div n 10))))))

(define (count-from-one i n)
(if (< n 10)
i
(count-from-one (+ i (count-one n))
(- n 1))))
(begin
(display (count-from-one 0 100))
(newline))

4. Josef Svenningsson said

``````zeroes :: Integer -> Integer