Given an integer num, the task for every digit of the number is to find the highest power of 2 not exceeding that digit.
Examples:
Input: num = 4317
Output: 4214
Explanation:
The highest power of 2 ? 4 is 4.
The highest power of 2 ? 3 is 2.
The highest power of 2 ? 1 is 1.
The highest power of 2 ? 7 is 4.Input: num = 8015
Output: 8014
Approach: Follow the steps below to solve the problem:
- Convert the number to its equivalent string.
- Traverse the string.
- If the digit is ‘0’, print 0.
- Otherwise, for every digit x, calculate 2(log2(x)).
Below is the implementation of the above approach:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the nearest power of // two for every digit of a given number void highestPowerOfTwo( int num)
{ // Converting number to string
string s = to_string(num);
// Traverse the array
for ( int i = 0; i < ( int )s.size();
i++) {
if (s[i] == '0' ) {
cout << "0" ;
continue ;
}
// Calculate log base 2
// of the current digit s[i]
int lg = log2( int (s[i]) - 48);
// Highest power of 2 <= s[i]
int p = pow (2, lg);
// ASCII conversion
cout << char (p + 48);
}
} // Driver Code int main()
{ int num = 4317;
highestPowerOfTwo(num);
return 0;
} |
Java
// Java program to implement // the above approach import java.util.*;
class GFG
{ // Function to find the nearest power of
// two for every digit of a given number
static void highestPowerOfTwo( int num)
{
// Converting number to string
String s = Integer.toString(num);
// Traverse the array
for ( int i = 0 ; i < ( int )s.length(); i++)
{
if (s.charAt(i) == '0' )
{
System.out.print( "0" );
continue ;
}
// Calculate log base 2
// of the current digit s[i]
int lg
= ( int )(Math.log(s.charAt(i) - '0' ) / Math.log( 2 ));
// Highest power of 2 <= s[i]
int p = ( int )Math.pow( 2 , lg);
// ASCII conversion
System.out.print(( char )(p + 48 ));
}
}
// Driver Code
public static void main(String args[])
{
int num = 4317 ;
highestPowerOfTwo(num);
}
} // This code is contributed by susmitakundugoaldanga. |
Python3
# Python 3 program for the above approach import math
# Function to find the nearest power of # two for every digit of a given number def highestPowerOfTwo(num) :
# Converting number to string
s = str (num)
# Traverse the array
for i in range ( len (s)):
if (s[i] = = '0' ) :
print ( "0" )
continue
# Calculate log base 2
# of the current digit s[i]
lg = int (math.log2( ord (s[i]) - 48 ))
# Highest power of 2 <= s[i]
p = pow ( 2 , lg)
# ASCII conversion
print ( chr (p + 48 ), end = "")
# Driver Code num = 4317
highestPowerOfTwo(num) # This code is contributed by code_hunt. |
C#
// C# program to implement // the above approach using System;
class GFG
{ // Function to find the nearest power of
// two for every digit of a given number
static void highestPowerOfTwo( int num)
{
// Converting number to string
String s = num.ToString();
// Traverse the array
for ( int i = 0; i < ( int )s.Length; i++)
{
if (s[i] == '0' )
{
Console.Write( "0" );
continue ;
}
// Calculate log base 2
// of the current digit s[i]
int lg
= ( int )(Math.Log(s[i] - '0' ) / Math.Log(2));
// Highest power of 2 <= s[i]
int p = ( int )Math.Pow(2, lg);
// ASCII conversion
Console.Write(( char )(p + 48));
}
}
// Driver Code
public static void Main()
{
int num = 4317;
highestPowerOfTwo(num);
}
} // This code is contributed by subhammahato348. |
Javascript
<script> // JavaScript program to implement
// the above approach
// Function to find the nearest power of
// two for every digit of a given number
function highestPowerOfTwo(num) {
// Converting number to string
var s = num.toString();
// Traverse the array
for ( var i = 0; i < s.length; i++) {
if (s[i] === "0" ) {
document.write( "0" );
continue ;
}
// Calculate log base 2
// of the current digit s[i]
var lg = parseInt(Math.log2(s[i].charCodeAt(0) - 48));
// Highest power of 2 <= s[i]
var p = Math.pow(2, lg);
// ASCII conversion
document.write(String.fromCharCode(p + 48));
}
}
// Driver Code
var num = 4317;
highestPowerOfTwo(num);
</script>
|
Output:
4214
Time Complexity: O(logN)
Auxiliary Space: O(1)