📜  前一个数字的二进制表示

📅  最后修改于: 2021-05-25 02:17:23             🧑  作者: Mango

给定一个表示正数n的二进制表示形式的二进制输入,找到n-1的二进制表示形式。可以假定输入的二进制数大于0。

二进制输入可能适合也可能不适合unsigned long long int。

例子:

Input : 10110
Output : 10101
Here n  = (22)10 = (10110)2
Previous number = (21)10 = (10101)2

Input : 11000011111000000
Output : 11000011110111111

我们将输入存储为字符串,以便可以处理大量数字。我们从最右边的字符遍历字符串,并将所有0转换为1,直到找到1。最后将找到的1转换为0。在此过程之后形成的数字就是所需的数字。如果输入为“ 1”,则前一个数字将为“ 0”。如果整个字符串只有第一个字符为“ 1”,那么我们将丢弃该字符并将所有0都更改为1。

C++
// C++ implementation to find the binary
// representation of previous number
#include 
using namespace std;
  
// function to find the required
// binary representation
string previousNumber(string num)
{
    int n = num.size();
  
    // if the number is '1'
    if (num.compare("1") == 0)
        return "0";
      
    // examine bits from right to left
    int i;
    for (i = n - 1; i >= 0; i--) {
  
        // if '1' is encountered, convert
        // it to '0' and then break
        if (num.at(i) == '1') {
            num.at(i) = '0';
            break;
        }
  
        // else convert '0' to '1'
        else
            num.at(i) = '1';
    }
  
    // if only the 1st bit in the
    // binary representation was '1'
    if (i == 0)
        return num.substr(1, n - 1);
  
    // final binary representation
    // of the required number
    return num;
}
  
// Driver program to test above
int main()
{
    string num = "10110";
    cout << "Binary representation of previous number = "
         << previousNumber(num);
    return 0;
}


Java
// Java implementation to find the binary 
// representation of previous number 
class GFG 
{
  
    // function to find the required 
    // binary representation 
    static String previousNumber(String num) 
    {
        int n = num.length();
  
        // if the number is '1' 
        if (num.compareTo("1") == 0) 
        {
            return "0";
        }
  
        // examine bits from right to left 
        int i;
        for (i = n - 1; i >= 0; i--)
        {
  
            // if '1' is encountered, convert 
            // it to '0' and then break 
            if (num.charAt(i) == '1') 
            {
                num = num.substring(0, i) + '0' + 
                            num.substring(i + 1);
                  
                // num.charAt(i) = '0'; 
                break;
            } 
              
            // else convert '0' to '1' 
            else 
            {
                num = num.substring(0, i) + '1' + 
                            num.substring(i + 1);
            }
            //num.at(i) = '1'; 
        }
  
        // if only the 1st bit in the 
        // binary representation was '1' 
        if (i == 0) 
        {
            return num.substring(1, n - 1);
        }
  
        // final binary representation 
        // of the required number 
        return num;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        String num = "10110";
        System.out.print("Binary representation of previous number = "
                + previousNumber(num));
    }
}
  
/* This code contributed by PrinciRaj1992 */


Python3
# Python3 implementation to find the binary
# representation of previous number
  
# function to find the required
# binary representation
def previousNumber(num1):
    n = len(num1);
    num = list(num1);
  
    # if the number is '1'
    if (num1 == "1"):
        return "0";
    i = n - 1;
      
    # examine bits from right to left
    while (i >= 0):
  
        # if '1' is encountered, convert
        # it to '0' and then break
        if (num[i] == '1'):
            num[i] = '0';
            break;
  
        # else convert '0' to '1'
        else:
            num[i] = '1';
        i -= 1;
  
    # if only the 1st bit in the
    # binary representation was '1'
    if (i == 0):
        return num[1:n];
  
    # final binary representation
    # of the required number
    return '' . join(num);
  
# Driver code
num = "10110";
print("Binary representation of previous number =", 
                              previousNumber(num));
      
# This code is contributed by mits


C#
// C# implementation to find the binary 
// representation of previous number 
using System;
  
class GFG 
{
  
    // function to find the required 
    // binary representation 
    static String previousNumber(String num) 
    {
        int n = num.Length;
  
        // if the number is '1' 
        if (num.CompareTo("1") == 0) 
        {
            return "0";
        }
  
        // examine bits from right to left 
        int i;
        for (i = n - 1; i >= 0; i--)
        {
  
            // if '1' is encountered, convert 
            // it to '0' and then break 
            if (num[i] == '1') 
            {
                num = num.Substring(0, i) + '0' + 
                            num.Substring(i + 1);
                  
                // num.charAt(i) = '0'; 
                break;
            } 
              
            // else convert '0' to '1' 
            else
            {
                num = num.Substring(0, i) + '1' + 
                            num.Substring(i + 1);
            }
            //num.at(i) = '1'; 
        }
  
        // if only the 1st bit in the 
        // binary representation was '1' 
        if (i == 0) 
        {
            return num.Substring(1, n - 1);
        }
  
        // final binary representation 
        // of the required number 
        return num;
    }
  
    // Driver code
    public static void Main(String[] args)
    {
        String num = "10110";
        Console.Write("Binary representation of previous number = "
                + previousNumber(num));
    }
}
  
// This code contributed by Rajput-Ji


PHP
= 0; $i--)
    {
  
        // if '1' is encountered, convert
        // it to '0' and then break
        if ($num[$i] == '1') 
        {
            $num[$i] = '0';
            break;
        }
  
        // else convert '0' to '1'
        else
            $num[$i] = '1';
    }
  
    // if only the 1st bit in the
    // binary representation was '1'
    if ($i == 0)
        return substr($num,1, $n - 1);
  
    // final binary representation
    // of the required number
    return $num;
}
  
    // Driver code
    $num = "10110";
    echo "Binary representation of previous number = ".previousNumber($num);
      
// This code is contributed by mits
?>


输出:

Binary representation of previous number = 10101

时间复杂度: O(n),其中n是输入中的位数。