给定整数X。任务是找到最小的正数Y (> 0),以使X AND Y为零。
例子:
Input : X = 3
Output : 4
4 is the samllest positive number whose bitwise AND with 3 is zero
Input : X = 10
Output : 1
方法 :
有2种情况:
- 如果X的二进制表示形式全为1,则Y的所有位应为0,以使AND运算的结果为零。那么X + 1是我们的答案,它是第一个正整数。
- 如果X的二进制表示不含有全1,在这种情况下,找到X中的第一位置,在该位为0。那么我们的答案将是power(2,position)
下面是上述方法的实现:
C++
// C++ program to find smallest number Y for
// a given value of X such that X AND Y is zero
#include
#define mod 1000000007
using namespace std;
// Method to find smallest number Y for
// a given value of X such that X AND Y is zero
int findSmallestNonZeroY(int A_num)
{
// Convert the number into its binary form
string A_binary = bitset<8>(A_num).to_string();
int B = 1;
int length = A_binary.size();
int no_ones = __builtin_popcount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (length == no_ones )
return A_num + 1;
// Case 2 : find the first 0-bit
// index and return the Y
for (int i=0;i
Java
// Java program to find smallest number Y for
// a given value of X such that X AND Y is zero
import java.lang.*;
public class Main {
// Method to find smallest number Y for
// a given value of X such that X AND Y is zero
static long findSmallestNonZeroY(long A_num)
{
// Convert the number into its binary form
String A_binary = Long.toBinaryString(A_num);
long B = 1;
int len = A_binary.length();
int no_ones = Long.bitCount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (len == no_ones) {
return A_num + 1;
}
// Case 2 : find the first 0-bit
// index and return the Y
for (int i = 0; i < len; i++) {
char ch = A_binary.charAt(len - i - 1);
if (ch == '0') {
B = (long)Math.pow(2.0, (double)i);
break;
}
}
return B;
}
// Driver code
public static void main(String[] args)
{
long X = findSmallestNonZeroY(10);
System.out.println(X);
}
}
Python3
# Python3 program to find smallest number Y for
# a given value of X such that X AND Y is zero
# Method to find smallest number Y for
# a given value of X such that X AND Y is zero
def findSmallestNonZeroY(A_num) :
# Convert the number into its binary form
A_binary = bin(A_num)
B = 1
length = len(A_binary);
no_ones = (A_binary).count('1');
# Case 1 : If all bits are ones,
# then return the next number
if length == no_ones :
return A_num + 1;
# Case 2 : find the first 0-bit
# index and return the Y
for i in range(length) :
ch = A_binary[length - i - 1];
if (ch == '0') :
B = pow(2.0, i);
break;
return B;
# Driver Code
if __name__ == "__main__" :
X = findSmallestNonZeroY(10);
print(X)
# This code is contributed by AnkitRai01
C#
// C# program to find smallest number Y for
// a given value of X such that X AND Y is zero
using System;
class GFG
{
// Method to find smallest number Y for
// a given value of X such that X AND Y is zero
static long findSmallestNonZeroY(long A_num)
{
// Convert the number into its binary form
String A_binary = Convert.ToString(A_num, 2);
long B = 1;
int len = A_binary.Length;
int no_ones = bitCount(A_num);
// Case 1 : If all bits are ones,
// then return the next number
if (len == no_ones)
{
return A_num + 1;
}
// Case 2 : find the first 0-bit
// index and return the Y
for (int i = 0; i < len; i++)
{
char ch = A_binary[len - i - 1];
if (ch == '0')
{
B = (long)Math.Pow(2.0, (double)i);
break;
}
}
return B;
}
static int bitCount(long x)
{
// To store the count
// of set bits
int setBits = 0;
while (x != 0)
{
x = x & (x - 1);
setBits++;
}
return setBits;
}
// Driver code
public static void Main(String[] args)
{
long X = findSmallestNonZeroY(10);
Console.WriteLine(X);
}
}
// This code is contributed by 29AjayKumar
输出:
1