Number of digits in the nth number made of given four digits

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.

Examples:

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.

1. Count all subsequent k digit numbers and keep adding them to a sum.
2. Break the loop when sum is greater than or equal to n.
3. Maintain a counter to keep track of the number of digits.
4. The value of the counter at the break of the loop will indicate the answer.

Note: Since n could be really large we have used boost library, to know more about boost library give this article a read: http://gdevtest.geeksforgeeks.org/advanced-c-boost-library/



My Personal Notes arrow_drop_up

Recommended Posts: