# 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.

## C++

`// CPP program to count number of digits ` `// in n-th number made of given four digits. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Efficient function to calculate number ` `// of digits in the nth number constructed ` `// by using 6, 1, 4 and 9 as digits in the ` `// ascending order. ` `ll number_of_digits(ll n) ` `{ ` ` ` `ll i, res, sum = 0; ` ` ` ` ` `// Number of digits increase after ` ` ` `// every i-th number where i increases in ` ` ` `// powers of 4. ` ` ` `for` `(i = 4, res = 1;; i *= 4, res++) { ` ` ` `sum += i; ` ` ` `if` `(sum >= n) ` ` ` `break` `; ` ` ` `} ` ` ` `return` `res; ` `} ` ` ` `// Driver Program. ` `int` `main() ` `{ ` ` ` `ll n = 21; ` ` ` `cout << number_of_digits(n) << endl; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count ` `// number of digits in ` `// n-th number made of ` `// given four digits. ` `import` `java.io.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Efficient function to ` `// calculate number of digits ` `// in the nth number constructed ` `// by using 6, 1, 4 and 9 as ` `// digits in the ascending order. ` `static` `int` `number_of_digits(` `int` `n) ` `{ ` ` ` `int` `i; ` ` ` `int` `res; ` ` ` `int` `sum = ` `0` `; ` ` ` ` ` `// Number of digits increase ` ` ` `// after every i-th number ` ` ` `// where i increases in powers of 4. ` ` ` `for` `(i = ` `4` `, res = ` `1` `;; i *= ` `4` `, res++) ` ` ` `{ ` ` ` `sum += i; ` ` ` `if` `(sum >= n) ` ` ` `break` `; ` ` ` `} ` ` ` `return` `res; ` `} ` ` ` `// Driver Code ` `public` `static` `void` `main (String[] args) ` `{ ` ` ` `int` `n = ` `21` `; ` ` ` `System.out.println(number_of_digits(n)); ` `} ` `} ` ` ` `// This code is contributed ` `// by akt_mit ` |

*chevron_right*

*filter_none*

## Python3

# Python3 program to count number of

# digits in n-th number made of given

# four digits.

# Efficient function to calculate number

# of digits in the nth number constructed

# by using 6, 1, 4 and 9 as digits in the

# ascending order.

def number_of_digits(n):

i = 4;

res = 1;

sum = 0;

# Number of digits increase after

# every i-th number where i increases

# in powers of 4.

while(True):

i *= 4;

res += 1;

sum += i;

if(sum >= n):

break;

return res;

# Driver Code

n = 21;

print(number_of_digits(n));

# This code is contributed by mits

## C#

`// C# program to count ` `// number of digits in ` `// n-th number made of ` `// given four digits. ` ` ` `using` `System; ` ` ` `public` `class` `GFG{ ` ` ` ` ` `// Efficient function to ` `// calculate number of digits ` `// in the nth number constructed ` `// by using 6, 1, 4 and 9 as ` `// digits in the ascending order. ` `static` `int` `number_of_digits(` `int` `n) ` `{ ` ` ` `int` `i; ` ` ` `int` `res; ` ` ` `int` `sum = 0; ` ` ` ` ` `// Number of digits increase ` ` ` `// after every i-th number ` ` ` `// where i increases in powers of 4. ` ` ` `for` `(i = 4, res = 1;; i *= 4, res++) ` ` ` `{ ` ` ` `sum += i; ` ` ` `if` `(sum >= n) ` ` ` `break` `; ` ` ` `} ` ` ` `return` `res; ` `} ` ` ` `// Driver Code ` ` ` ` ` `static` `public` `void` `Main (){ ` ` ` ` ` `int` `n = 21; ` ` ` `Console.WriteLine(number_of_digits(n)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count number ` `// of digits in n-th number ` `// made of given four digits. ` ` ` `// Efficient function to ` `// calculate number of digits ` `// in the nth number constructed ` `// by using 6, 1, 4 and 9 as ` `// digits in the ascending order. ` `function` `number_of_digits(` `$n` `) ` `{ ` ` ` `$i` `; ` `$res` `; ` `$sum` `= 0; ` ` ` ` ` `// Number of digits increase ` ` ` `// after every i-th number ` ` ` `// where i increases in ` ` ` `// powers of 4. ` ` ` `for` `(` `$i` `= 4, ` `$res` `= 1;; ` ` ` `$i` `*= 4, ` `$res` `++) ` ` ` `{ ` ` ` `$sum` `+= ` `$i` `; ` ` ` `if` `(` `$sum` `>= ` `$n` `) ` ` ` `break` `; ` ` ` `} ` ` ` `return` `$res` `; ` `} ` ` ` `// Driver Code ` `$n` `= 21; ` `echo` `number_of_digits(` `$n` `),` `"\n"` `; ` ` ` `// This code is contributed by ajit ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

3

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

## Recommended Posts:

- Nth number made up of odd digits only
- Find the n-th number made of even digits only
- Smallest multiple of a given number made of digits 0 and 9 only
- Finding n-th number made of prime digits (2, 3, 5 and 7) only
- Check whether product of digits at even places is divisible by sum of digits at odd place of a number
- Count of numbers between range having only non-zero digits whose sum of digits is N and number is divisible by M
- Minimum number of digits to be removed so that no two consecutive digits are same
- Find the Largest number with given number of digits and sum of digits
- Find smallest number with given number of digits and sum of digits
- Smallest number with given sum of digits and sum of square of digits
- Find count of digits in a number that divide the number
- Number of digits to be removed to make a number divisible by 3
- Find the smallest number whose digits multiply to a given number n
- Number of times a number can be replaced by the sum of its digits until it only contains one digit
- Print a number strictly less than a given number such that all its digits are distinct.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.