给定两个非负整数a和b 。问题是检查两个数字是否仅在一位位置不同。
例子:
Input : a = 13, b = 9
Output : Yes
(13)10 = (1101)2
(9)10 = (1001)2
Both the numbers differ at one bit position only, i.e,
differ at the 3rd bit from the right.
Input : a = 15, b = 8
Output : No
方法:以下是步骤:
- 计算num = a ^ b。
- 检查num是否为2的幂。请参阅这篇文章。
C++
// C++ implementation to check whether the two
// numbers differ at one bit position only
#include
using namespace std;
// function to check if x is power of 2
bool isPowerOfTwo(unsigned int x)
{
// First x in the below expression is
// for the case when x is 0
return x && (!(x & (x - 1)));
}
// function to check whether the two numbers
// differ at one bit position only
bool differAtOneBitPos(unsigned int a,
unsigned int b)
{
return isPowerOfTwo(a ^ b);
}
// Driver program to test above
int main()
{
unsigned int a = 13, b = 9;
if (differAtOneBitPos(a, b))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java implementation to check whether the two
// numbers differ at one bit position only
import java.io.*;
import java.util.*;
class GFG {
// function to check if x is power of 2
static boolean isPowerOfTwo(int x)
{
// First x in the below expression is
// for the case when x is 0
return x!= 0 && ((x & (x - 1)) == 0);
}
// function to check whether the two numbers
// differ at one bit position only
static boolean differAtOneBitPos(int a, int b)
{
return isPowerOfTwo(a ^ b);
}
// Driver code
public static void main(String args[])
{
int a = 13, b = 9;
if (differAtOneBitPos(a, b) == true)
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by rachana soma
Python3
# Python3 implementation to check whether the two
# numbers differ at one bit position only
# function to check if x is power of 2
def isPowerOfTwo( x ):
# First x in the below expression is
# for the case when x is 0
return x and (not(x & (x - 1)))
# function to check whether the two numbers
# differ at one bit position only
def differAtOneBitPos( a , b ):
return isPowerOfTwo(a ^ b)
# Driver code to test above
a = 13
b = 9
if (differAtOneBitPos(a, b)):
print("Yes")
else:
print( "No")
# This code is contributed by "Sharad_Bhardwaj".
C#
// C# implementation to check whether the two
// numbers differ at one bit position only
using System;
class GFG
{
// function to check if x is power of 2
static bool isPowerOfTwo(int x)
{
// First x in the below expression is
// for the case when x is 0
return x != 0 && ((x & (x - 1)) == 0);
}
// function to check whether the two numbers
// differ at one bit position only
static bool differAtOneBitPos(int a, int b)
{
return isPowerOfTwo(a ^ b);
}
// Driver code
public static void Main()
{
int a = 13, b = 9;
if (differAtOneBitPos(a, b) == true)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by ihritik
PHP
Javascript
输出:
Yes
时间复杂度: O(1)。