给定两个数字A和B ,任务是计算A和B中设置的位数,然后翻转获得的总和的位数。
例子:
Input: A = 5, B = 7
Output: 2
Explanation:
Binary representation of A is 101.
Binary representation of B is 111.
Count of set bits in A and B = 2 + 3 = 5.
Binary representation of the sum obtained = 101
Flipping the bits of the sum, the number obtained is (010)2 = 2.
Therefore, the required output is 2.
Input: A = 76, B = 35
Output: 1
Explanation:
Binary representation of A is 1001100
Binary representation of B is 100011
Count of set bits in A and B = 3 + 3 = 6
Binary representation of the sum obtained = 110
Flipping the bits of the sum, the number obtained is (001)2 = 1.
Therefore, the required output is 1.
天真的方法:解决此问题的想法是先遍历两个数字的二进制表示形式,然后遍历两个数字中的设置位数。最后,将它们相加并将求和数的位取反。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Functon to count number of
// set bits in integer
int countSetBits(int n)
{
// Variable for counting set bits
int count = 0;
while (n) {
n &= (n - 1);
count++;
}
return count;
}
// Function to invert bits of a number
int invertBits(int n)
{
// Calculate number of bits of N-1;
int x = log2(n);
int m = 1 << x;
m = m | m - 1;
n = n ^ m;
return n;
}
// Function to invert the sum
// of set bits in A and B
void invertSum(int A, int B)
{
// Stores sum of set bits
int temp = countSetBits(A)
+ countSetBits(B);
cout << invertBits(temp) << endl;
}
// Driver Code
int main()
{
int A = 5;
int B = 7;
invertSum(A, B);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Functon to count number of
// set bits in integer
static int countSetBits(int n)
{
// Variable for counting set bits
int count = 0;
while (n != 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Function to invert bits of a number
static int invertBits(int n)
{
// Calculate number of bits of N-1;
int x = (int)(Math.log(n) / Math.log(2));
int m = 1 << x;
m = m | m - 1;
n = n ^ m;
return n;
}
// Function to invert the sum
// of set bits in A and B
static void invertSum(int A, int B)
{
// Stores sum of set bits
int temp = countSetBits(A) +
countSetBits(B);
System.out.print(invertBits(temp));
}
// Driver Code
static public void main(String args[])
{
int A = 5;
int B = 7;
invertSum(A, B);
}
}
// This code is contributed by susmitakundugoaldanga
Python3
# Python3 program for the above approach
import math
# Functon to count number of
# set bits in integer
def countSetBits(n):
# Variable for counting set bits
count = 0
while (n != 0):
n &= (n - 1)
count += 1
return count
# Function to invert bits of a number
def invertBits(n):
# Calculate number of bits of N-1;
x = (int)(math.log(n) / math.log(2))
m = 1 << x
m = m | m - 1
n = n ^ m
return n
# Function to invert the sum
# of set bits in A and B
def invertSum(A, B):
# Stores sum of set bits
temp = countSetBits(A) + countSetBits(B)
print(invertBits(temp))
# Driver Code
A = 5
B = 7
invertSum(A, B)
# This code is contributed by shikhasingrajput
C#
// C# program for the above approach
using System;
class GFG{
// Functon to count number of
// set bits in integer
static int countSetBits(int n)
{
// Variable for counting set bits
int count = 0;
while (n != 0)
{
n &= (n - 1);
count++;
}
return count;
}
// Function to invert bits of a number
static int invertBits(int n)
{
// Calculate number of bits of N-1;
int x = (int)Math.Log(n, 2);
int m = 1 << x;
m = m | m - 1;
n = n ^ m;
return n;
}
// Function to invert the sum
// of set bits in A and B
static void invertSum(int A, int B)
{
// Stores sum of set bits
int temp = countSetBits(A) +
countSetBits(B);
Console.WriteLine(invertBits(temp));
}
// Driver Code
static void Main()
{
int A = 5;
int B = 7;
invertSum(A, B);
}
}
// This code is contributed by divyesh072019
Javascript
2
时间复杂度: O(logN)
辅助空间: O(1)