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