Related Articles

Related Articles

Number of digits in the nth number made of given four digits
  • Difficulty Level : Hard
  • Last Updated : 08 May, 2019

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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



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: Advanced C++ with boost library

competitive-programming-img




My Personal Notes arrow_drop_up
Recommended Articles
Page :