Codesignal Solution: No odd Digits
Given a non-negative integer number, remove all of its odd digits (if all of the digits are removed, return zero).
- [time limit] 4000ms (js)
- [input] integer n
- [output] integer
Solution
A number without all it's odd numbers is the sum of all the even numbers multiplied by a continues series of power of ten. For example the number 123456 is 6 + 10 * 4 + 100 * 2. Based on this observation, we can formulate a recursive formula:
\[f(n) = \begin{cases} f(\left\lfloor\frac{n}{10}\right\rfloor) \cdot 10 + n\bmod 10, & \text{if}\ n\text{ is even} \\ f(\left\lfloor\frac{n}{10}\right\rfloor), & \text{otherwise} \end{cases}\]
With an end-check formulated as JavaScript:
_ = noOddDigits = n => n ? n % 2 ? _(n / 10 | 0) : _(n / 10 | 0) * 10 + n % 10 : 0