📌  相关文章
📜  通过重新排列位数来最大化数量

📅  最后修改于: 2021-05-05 00:10:24             🧑  作者: Mango

给定无符号数,请使用给定无符号数的位查找可以形成的最大数。

例子 :

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基础课程》。