Find position of the given number among the numbers made of 4 and 7

Last Updated : 6 Jan, 2024

Consider a series of numbers composed of only digits 4 and 7. The first few numbers in the series are 4, 7, 44, 47, 74, 77, 444, .. etc. Given a number constructed by 4, 7 digits only, we need to find the position of this number in this series.

Examples: 

Input : 7
Output : pos = 2 

Input : 444
Output : pos = 7
Recommended Practice

It is reverse of the following article : 
Find n-th element in a series with only 2 digits (4 and 7) allowed | Set 2 (log(n) method) 

                      ""
               /              \
             1(4)            2(7)
          /        \       /      \ 
        3(44)    4(47)   5(74)    6(77)
       / \       / \      / \      / \

The idea is based on the fact that all even positioned numbers have 7 as the last digit and all odd positioned numbers have 4 as the last digit.
If the number is 4 then it is the left node of the tree, then it corresponds to (pos*2)+1. Else right child node(7) corresponds to (pos*2)+2.

Implementation:

C++
// C++ program to find position of a number
// in a series of numbers with 4 and 7 as the
// only digits.
#include <iostream>
#include <algorithm>
using namespace std;

int findpos(string n)
{
    int i = 0, pos = 0;
    while (n[i] != '\0') {

        // check all digit position
        switch (n[i]) 
        {

        // if number is left then pos*2+1
        case '4':
            pos = pos * 2 + 1;
            break;

        // if number is right then pos*2+2
        case '7':
            pos = pos * 2 + 2; 
            break;
        }
        i++;
    }
    return pos;
}

// Driver code
int main()
{ 
    // given a number which is constructed 
    // by 4 and 7 digit only 
    string n = "774"; 
    cout << findpos(n);
    return 0;
}
Java
// java program to find position of a number
// in a series of numbers with 4 and 7 as the
// only digits.
import java.util.*;

class GFG {
    
    static int findpos(String n)
    {
        
        int k = 0, pos = 0, i = 0;
        while (k != n.length()) {

            // check all digit position
            switch (n.charAt(i)) {

            // if number is left then pos*2+1
            case '4':
                pos = pos * 2 + 1;
                break;

            // if number is right then pos*2+2
            case '7':
                pos = pos * 2 + 2;
                break;
            }
            
            i++;
            k++;
        }
        
        return pos;
    }

    // Driver code
    public static void main(String[] args)
    {
        
        // given a number which is constructed
        // by 4 and 7 digit only
        String n = "774";
        
        System.out.println(findpos(n));
    }
}

// This code is contributed by Sam007.
Python3
# python program to find position 
# of a number in a series of 
# numbers with 4 and 7 as the
# only digits.
def findpos(n):
    i = 0
    j = len(n)
    pos = 0
    while (i<j):
        
        # check all digit position
        # if number is left then 
        # pos*2+1
        if(n[i] == '4'):
            pos = pos * 2 + 1
            
        # if number is right then
        # pos*2+2
        if(n[i] == '7'):
            pos = pos * 2 + 2
        
        i= i+1
    
    return pos


# Driver code
# given a number which is constructed 
# by 4 and 7 digit only 
n = "774"
print(findpos(n))

# This code is contributed by Sam007
C#
// C# program to find position of 
// a number in a series of numbers
// with 4 and 7 as the only digits.
using System;

class GFG
{
    static int findpos(String n)
    {
        
        int k = 0, pos = 0, i = 0;
        while (k != n.Length) {

            // check all digit position
            switch (n[i]) {

            // if number is left then pos*2+1
            case '4':
                pos = pos * 2 + 1;
                break;

            // if number is right then pos*2+2
            case '7':
                pos = pos * 2 + 2;
                break;
            }
            
            i++;
            k++;
        }
        
        return pos;
    }

    // Driver code
    static void Main()
    {
        
        // given a number which is constructed
        // by 4 and 7 digit only
        String n = "774";
        
        Console.Write(findpos(n));
    }
    
}

// This code is contributed by Sam007
PHP
<?php
// PHP program to find position of a number
// in a series of numbers with 4 and 7 as the
// only digits.

function findpos($n)
{
    $i = 0;
    $pos = 0;
    while($i < strlen($n)) {

        // check all digit position
        switch ($n[$i]) 
        {

        // if number is left then pos*2+1
        case '4':
            $pos = $pos * 2 + 1;
            break;

        // if number is right then pos*2+2
        case '7':
            $pos = $pos * 2 + 2; 
            break;
        }
        $i++;
    }
    return $pos;
}

    // Driver code
    // given a number which
    // is constructed by 4 
    // and 7 digit only 
    $n = "774"; 
    echo findpos($n);
    
// This code is contributed by Sam007
?>
JavaScript
<script>
    // Javascript program to find position of a number
// in a series of numbers with 4 and 7 as the
// only digits.
  
function findpos(n)
{
    let i = 0;
    let pos = 0;
    while(i < n.length) {
  
        // check all digit position
        switch (n[i]) 
        {
  
        // if number is left then pos*2+1
        case '4':
            pos = pos * 2 + 1;
            break;
  
        // if number is right then pos*2+2
        case '7':
            pos = pos * 2 + 2; 
            break;
        }
        i++;
    }
    return pos;
}
  
    // Driver code
    // given a number which
    // is constructed by 4 
    // and 7 digit only 
    let n = "774"; 
    document.write(findpos(n));
      
// This code is contributed by _saurabh_jaiswal
</script>

Output
13

Time Complexity: O(n), where n represents the size of the given string.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

 

Comment