Помітимо, що кількість паличок, яка буде використана, дорівнює кількості разів, коли зустрічається цифра i серед чисел від 0 до n, помноженій на кількість паличок, необхідну для цієї цифри. Тобто загалом:
\sum_{i=0}^{9} cnt[i]\cdot segment[i],
де segment[i] = \{6, 2, 5, 5, 4, 5, 6, 3, 7, 6\} — кількість сегментів для відповідної цифри.
Остання складність — це обчислити cnt[i], тобто кількість появ цифри i у числах від 0 до n. Розглянемо кількість певної цифри на певній позиції, починаючи з найменшого розряду: нехай cnt[i][j] — кількість появ цифри i на j-му розряді серед чисел від 0 до n.
Порахуємо допоміжні значення:
pow = 10^j,
\qquad
\mathrm{high} = \left\lfloor \frac{n}{10\,pow} \right\rfloor,
\qquad
\mathrm{current} = \left\lfloor \frac{n}{pow} \right\rfloor \bmod 10,
\qquad
\mathrm{low} = n \bmod pow.
Тоді для i\neq0 маємо:
cnt[i][j]
=
\mathrm{high}\times pow
+
\begin{cases}
pow, & \text{якщо }\mathrm{current}>i,\\
\mathrm{low}+1, & \text{якщо }\mathrm{current}=i,\\
0, & \text{якщо }\mathrm{current}<i.
\end{cases}
Для i=0:
cnt[0][j]
=
\begin{cases}
0, & \text{якщо }\mathrm{high}=0,\\
(\mathrm{high}-1)\times pow, & \text{якщо }\mathrm{high}\geq1,
\end{cases}
+
\begin{cases}
pow, & \text{якщо }\mathrm{current}>0,\\
\mathrm{low}+1, & \text{якщо }\mathrm{current}=0,\\
0, & \text{якщо }\mathrm{current}<0.
\end{cases}
Отже, порахувавши всі cnt[i][j], ми можемо обчислити
cnt[i] = \sum_{j=0}^{9} cnt[i][j],
після чого обчислити загальну кількість сегментів.
Загальна часова складність O(10\log_{10}{n}).