Find position of the given number among the numbers made of 4 and 7
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
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> |
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.
This article is contributed by Devanshu Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Login to comment...