给定一个表示正数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是输入中的位数。