Maximize the number by rearranging bits
Given an unsigned number, find the maximum number that could be formed by using the bits of the given unsigned number.
Examples :
Input : 1 (0000....0001) Output : 2147483648 (1000....0000) Input : 7 (0000....0111) Output : 3758096384 (0111....0000)
Method 1 (Simple)
1. Find binary representation of the number using simple decimal to binary representation technique.
2. Count number of set bits in the binary representation equal to ‘n’.
3. Create a binary representation with its ‘n’ most significant bits set to 1.
4. Convert the binary representation back to the number.
C++
// An simple C++ program to find // minimum number formed by bits of a // given number. #include <bits/stdc++.h> #define ll unsigned int using namespace std; // Returns maximum number formed by // bits of a given number. ll maximize(ll a) { // _popcnt32(a) gives number of 1's // present in binary representation of a. ll n = _popcnt32(a); // Set most significant n bits of res. ll res = 0; for ( int i=1; i<=n; i++) res |= (1 << (32 - i)); return res; } // Driver function. int main() { ll a = 1; cout << maximize(a) << endl; return 0; } |
Java
// An simple Java program to find // minimum number formed by bits // of a given number. import java.io.*; class GFG { private static int _popcnt32( long number) { int counter = 0 ; while (number > 0 ) { if (number % 2 == 1 ) { counter++; } //or number = number >> 1 number = number / 2 ; } return counter; } // Returns maximum number formed // by bits of a given number. static long maximize( long a) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. int n = _popcnt32(a); // Set most significant // n bits of res. long res = 0 ; for ( int i = 1 ; i <= n; i++) res = ( int )res | ( 1 << ( 32 - i)); return Math.abs(res); } // Driver Code public static void main(String args[]) { long a = 1 ; System.out.print(maximize(a)); } } // This code is contributed by // Manish Shaw(manishshaw1) |
Python3
# An simple Python program to # find minimum number formed # by bits of a given number. def _popcnt32(number) : counter = 0 while (number > 0 ) : if (number % 2 = = 1 ) : counter = counter + 1 # or number = number >> 1 number = int (number / 2 ) return counter # Returns maximum number formed # by bits of a given number. def maximize(a) : # _popcnt32(a) gives number # of 1's present in binary # representation of a. n = _popcnt32(a) # Set most significant # n bits of res. res = 0 for i in range ( 1 , n + 1 ) : res = int (res | ( 1 << ( 32 - i))) return abs (res) # Driver Code a = 1 print (maximize(a)) # This code is contributed by # Manish Shaw(manishshaw1) |
C#
// An simple C# program to find // minimum number formed by bits // of a given number. using System; class GFG { // Returns maximum number formed // by bits of a given number. static long maximize( long a) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. string binaryString = Convert.ToString(a, 2); int n = binaryString.Split( new [] { '0' }, StringSplitOptions.RemoveEmptyEntries).Length; // Set most significant n bits of res. long res = 0; for ( int i = 1; i <= n; i++) res = ( int )res | (1 << (32 - i)); return Math.Abs(res); } // Driver Code. static void Main() { long a = 1; Console.WriteLine(maximize(a)); } } // This code is contributed by // Manish Shaw(manishshaw1) |
PHP
<?php // An simple PHP program to find // minimum number formed by bits // of a given number. function _popcnt32( $number ) { $counter = 0; while ( $number > 0) { if ( $number % 2 == 1) { $counter ++; } //or number = number >> 1 $number = intval ( $number / 2); } return $counter ; } // Returns maximum number formed // by bits of a given number. function maximize( $a ) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. $n = _popcnt32( $a ); // Set most significant // n bits of res. $res = 0; for ( $i = 1; $i <= $n ; $i ++) $res = intval ( $res | (1 << (32 - $i ))); return abs ( $res ); } // Driver Code $a = 1; echo (maximize( $a )); // This code is contributed by // Manish Shaw(manishshaw1) ?> |
Javascript
<script> // An simple JavaScript program to find // minimum number formed by bits of a // given number. function _popcnt32(number) { var counter = 0; while (number > 0) { if (number % 2 == 1) { counter++; } //or number = number >> 1 number = parseInt(number / 2); } return counter; } // Returns maximum number formed by // bits of a given number. function maximize(a) { // _popcnt32(a) gives number of 1's // present in binary representation of a. var n = _popcnt32(a); // Set most significant n bits of res. var res = 0; for ( var i=1; i<=n; i++) res |= (1 << (32 - i)); return Math.abs(res); } // Driver function. var a = 1; document.write(maximize(a)); </script> |
Output:
2147483648
Method 2 (Efficient)
The idea is to first find a number with n least significant set bits, then shift the number left by 32-n.
C++
// An efficient C++ program to find // minimum number formed by bits of a // given number. #include <bits/stdc++.h> #define ll unsigned int using namespace std; // Returns maximum number formed by // bits of a given number. ll maximize(ll a) { // _popcnt32(a) gives number of 1's // present in binary representation of a. ll n = _popcnt32(a); // If all 32 bits are set. if (n == 32) return a; // find a number with n least // significant set bits. ll res = (1 << n) - 1; // Now shift result by 32 - n return (res << (32 - n)) ; } // Driver function. int main() { ll a = 3; cout << maximize(a) << endl; return 0; } |
Java
// An efficient Java program to // find minimum number formed // by bits of a given number. import java.io.*; class GFG { static long _popcnt32( long n) { long count = 0 ; while (n != 0 ) { n = n & (n - 1 ); count++; } return count; } // Returns maximum number // formed by bits of a // given number. static long maximize( long a) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. long n = _popcnt32(a); // If along 32 // bits are set. if (n == 32 ) return a; // find a number with // n least significant // set bits. long res = ( 1 << n) - 1 ; // Now shift result // by 32 - n return (res << ( 32 - n)) ; } // Driver Code public static void main(String args[]) { long a = 3 ; System.out.print(maximize(a)); } } // This code is contributed by // ManishShaw(manishshaw1) |
Python3
# An efficient python3 program to find # minimum number formed by bits of a # given number. def _popcnt32(n): count = 0 while (n ! = 0 ): n = n & (n - 1 ) count = count + 1 return count # Returns maximum number formed by # bits of a given number. def maximize(a): # _popcnt32(a) gives number of 1's # present in binary representation of a. n = _popcnt32(a) # If all 32 bits are set. if (n = = 32 ): return a # Find a number with n least # significant set bits. res = ( 1 << n) - 1 # Now shift result by 32 - n return (res << ( 32 - n)) # Driver code if __name__ = = '__main__' : a = 3 print (maximize(a)) # This code is contributed by nirajgusain5 |
C#
// An efficient C# program to // find minimum number formed // by bits of a given number. using System; class GFG { static long _popcnt32( long n) { long count = 0; while (n != 0) { n = n & (n - 1); count++; } return count; } // Returns maximum number // formed by bits of a // given number. static long maximize( long a) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. long n = _popcnt32(a); // If along 32 // bits are set. if (n == 32) return a; // find a number with n // least significant set bits. long res = (1 << Convert.ToInt32(n)) - 1; // Now shift result // by 32 - n return (res << (32 - Convert.ToInt32(n))) ; } // Driver Code static void Main() { long a = 3; Console.WriteLine(maximize(a)); } } // This code is contributed by // ManishShaw(manishshaw1) |
PHP
<?php // An efficient Java program to // find minimum number formed // by bits of a given number. function _popcnt32( $n ) { $count = 0; while ( $n != 0) { $n = $n & ( $n - 1); $count ++; } return $count ; } // Returns maximum number // formed by bits of a // given number. function maximize( $a ) { // _popcnt32(a) gives number // of 1's present in binary // representation of a. $n = _popcnt32( $a ); // If a$32 // bits are set. if ( $n == 32) return $a ; // find a number with // n least significant // set bits. $res = (1 << $n ) - 1; // Now shift result // by 32 - n return ( $res << (32 - $n )) ; } // Driver Code $a = 3; echo (maximize( $a )); // This code is contributed by // ManishShaw(manishshaw1) ?> |
Javascript
// An efficient JS program to find // minimum number formed by bits of a // given number. function _popcnt32(n) { var count = 0n; while (n != 0n) { n = n & (n - 1n); count = count + 1n; } return count; } // Returns maximum number formed by // bits of a given number. function maximize(a) { // _popcnt32(a) gives number of 1's // present in binary representation of a. var n = _popcnt32(a); // If all 32 bits are set. if (n == 32n) return a; // Find a number with n least // significant set bits. var res = (1n << n) - 1n; // Now shift result by 32 - n return (res << (32n - n)); } var a = 3n; console.log(Number(maximize(a))); // This code is contributed by phasing17 |
Output:
3221225472
Note: The above codes use GCC specific functions. If we wish to write code for other compilers, we may use Count set bits in an integer.
Please Login to comment...