Find the number of digits in the nth number constructed by using 6, 1, 4 and 9 as the only digits in the ascending order.
First few numbers constructed by using only 6, 1, 4 and 9 as digits in the ascending order would be: 1, 6, 4,
9, 11, 14, 16, 19, 41, 44, 46, 49, 61, 64, 66, 69, 91, 94, 96, 99, 111, 114, 116, 119 and so on.
Input : 6 Output : 2 6th digit of the series is 14 which has 2 digits. Input : 21 Output : 3 21st digit of the series is 111 which has 3 digits.
Simple Approach: This is a brute force approach.
1. Initialize a number to 1 and a counter to 0.
2. Check if the initialized number has only 6, 1, 4 or 9 as it’s digits.
3. If it has only the mentioned digits then increase the counter by 1.
4. Increase the number and repeat the above steps until the counter is less than n.
Note: The value of n could be large and hence this approach can’t work as it’s not time efficient.
Efficient Approach: You can calculate the number of k digit numbers in O (1) time and they will be always be power of 4, for instance number of 1 digit numbers in the series would be 4, number of 2 digit numbers in the series would be 16 and so on.
- Count all subsequent k digit numbers and keep adding them to a sum.
- Break the loop when sum is greater than or equal to n.
- Maintain a counter to keep track of the number of digits.
- The value of the counter at the break of the loop will indicate the answer.
Below is the implementation of the above approach:
Note: Since n could be really large we have used boost library, to know more about boost library give this article a read: Advanced C++ with boost library
Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.