给定无符号数,请使用给定无符号数的位查找可以形成的最大数。
例子 :
Input : 1 (0000....0001)
Output : 2147483648 (1000....0000)
Input : 7 (0000....0111)
Output : 3758096384 (0111....0000)
方法1(简单)
1.使用简单的十进制到二进制表示技术查找数字的二进制表示形式。
2.计数二进制表示中等于“ n”的置位位数。
3.创建一个二进制表示形式,其“ n”个最高有效位设置为1。
4.将二进制表示形式转换回数字。
C++
// An simple C++ program to find
// minimum number formed by bits of a
// given number.
#include
#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
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)
?>
C++
// An efficient C++ program to find
// minimum number formed by bits of a
// given number.
#include
#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 witn 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 witn
// 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)
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 witn 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
输出:
2147483648
方法2(高效)
这个想法是首先找到一个具有n个最低有效置位比特的数字,然后将数字左移32-n。
C++
// An efficient C++ program to find
// minimum number formed by bits of a
// given number.
#include
#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 witn 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 witn
// 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)
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 witn 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
输出:
3221225472
注意:以上代码使用GCC特定功能。如果我们希望为其他编译器编写代码,则可以使用整数形式的Count设置位。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。