Related Articles

# Find position of given term in a series formed with only digits 4 and 7 allowed

• Last Updated : 25 Mar, 2021

There is a series of numbers that have only digits, 4 and 7, and numbers are arranged in increasing order. The first few numbers of the series are 4, 7, 44, 47, 74, 77, 444, …etc. Given a number N, the task is to find the position of that number in the given series.
Examples:

Input: N = 4
Output:
Explanation:
The first number in the series is 4
Input: N = 777
Output: 14
Explanation:
The 14th number in the series is 777

Approach: This problem can be solved using the below observations:

• Below is the pattern observe in the given series. The numbers can be seen as:

```                 ""
/      \
4         7
/   \     /   \
44    47   74    77
/ \   / \   / \  / \```
•
• As we can observe the pattern is increasing in power of 2. Therefore the idea is to iterate over the digits of the number starting from the least significant digit and update the position of the number as:
1. If current digit = 7, then add to the position.
2. If current digit = 4, then add to the position.
• Print the final position after the above operations.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to find the position``// of the number N``void` `findPosition(``int` `n)``{``    ``int` `i = 0;` `    ``// To store the position of N``    ``int` `pos = 0;` `    ``// Iterate through all digit of N``    ``while` `(n > 0) {` `        ``// If current digit is 7``        ``if` `(n % 10 == 7) {``            ``pos = pos + ``pow``(2, i + 1);``        ``}` `        ``// If current digit is 4``        ``else` `{``            ``pos = pos + ``pow``(2, i);``        ``}` `        ``i++;``        ``n = n / 10;``    ``}` `    ``// Print the final position``    ``cout << pos;``}` `// Driver Code``int` `main()``{``    ``// Given number of the series``    ``int` `N = 777;` `    ``// Function Call``    ``findPosition(N);``    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;``class` `GFG{` `// Function to find the position``// of the number N``static` `void` `findPosition(``int` `n)``{``    ``int` `i = ``0``;` `    ``// To store the position of N``    ``int` `pos = ``0``;` `    ``// Iterate through all digit of N``    ``while` `(n > ``0``)``    ``{` `        ``// If current digit is 7``        ``if` `(n % ``10` `== ``7``)``        ``{``            ``pos = pos + (``int``)Math.pow(``2``, i + ``1``);``        ``}` `        ``// If current digit is 4``        ``else``        ``{``            ``pos = pos + (``int``)Math.pow(``2``, i);``        ``}` `        ``i++;``        ``n = n / ``10``;``    ``}` `    ``// Print the final position``    ``System.out.print(pos);``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``// Given number of the series``    ``int` `N = ``777``;` `    ``// Function Call``    ``findPosition(N);``}``}` `// This code is contributed by shivanisinghss2110`

## Python3

 `# Python3 program for the above approach` `# Function to find the position``# of the number N``def` `findPosition(n):``    ` `    ``i ``=` `0` `    ``# To store the position of N``    ``pos ``=` `0` `    ``# Iterate through all digit of N``    ``while` `(n > ``0``):` `        ``# If current digit is 7``        ``if` `(n ``%` `10` `=``=` `7``):``            ``pos ``=` `pos ``+` `pow``(``2``, i ``+` `1``)` `        ``# If current digit is 4``        ``else``:``            ``pos ``=` `pos ``+` `pow``(``2``, i)``            ` `        ``i ``+``=` `1``        ``n ``=` `n ``/``/` `10` `    ``# Print the final position``    ``print``(pos)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``# Given number of the series``    ``N ``=` `777` `    ``# Function Call``    ``findPosition(N)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG{` `// Function to find the position``// of the number N``static` `void` `findPosition(``int` `n)``{``    ``int` `i = 0;` `    ``// To store the position of N``    ``int` `pos = 0;` `    ``// Iterate through all digit of N``    ``while` `(n > 0)``    ``{` `        ``// If current digit is 7``        ``if` `(n % 10 == 7)``        ``{``            ``pos = pos + (``int``)Math.Pow(2, i + 1);``        ``}` `        ``// If current digit is 4``        ``else``        ``{``            ``pos = pos + (``int``)Math.Pow(2, i);``        ``}` `        ``i++;``        ``n = n / 10;``    ``}` `    ``// Print the final position``    ``Console.Write(pos);``}` `// Driver Code``public` `static` `void` `Main()``{``    ``// Given number of the series``    ``int` `N = 777;` `    ``// Function Call``    ``findPosition(N);``}``}` `// This code is contributed by Code_Mech`

## Javascript

 ``
Output:
`14`

Time Complexity: O(log10N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up