Friday, January 10, 2025
Google search engine
HomeData Modelling & AIInvert the Kth most significant bit of N

Invert the Kth most significant bit of N

Given two non-negative integers N and K, the task is to invert the Kth most significant bit of N and print the number obtained after inverting the bit.
Examples: 
 

Input: N = 10, K = 1 
Output:
The binary representation of 10 is 1010
After inverting the first bit it becomes 0010 
whose decimal equivalent is 2.
Input: N = 56, K = 2 
Output: 40 
 

 

Approach: Find the number of bits in N, if the number of bits is less than K then N itself is the required answer else flip the Kth most significant bit of N and print the number obtained after flipping it.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert decimal number n
// to its binary representation
// stored as an array arr[]
void decBinary(int arr[], int n)
{
    int k = log2(n);
    while (n > 0) {
        arr[k--] = n % 2;
        n /= 2;
    }
}
 
// Function to convert the number
// represented as a binary array
// arr[] into its decimal equivalent
int binaryDec(int arr[], int n)
{
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans += arr[i] << (n - i - 1);
    return ans;
}
 
// Function to return the updated integer
// after flipping the kth bit
int getNum(int n, int k)
{
 
    // Number of bits in n
    int l = log2(n) + 1;
 
    // Find the binary
    // representation of n
    int a[l] = { 0 };
    decBinary(a, n);
 
    // The number of bits in n
    // are less than k
    if (k > l)
        return n;
 
    // Flip the kth bit
    a[k - 1] = (a[k - 1] == 0) ? 1 : 0;
 
    // Return the decimal equivalent
    // of the number
    return binaryDec(a, l);
}
 
// Driver code
int main()
{
    int n = 56, k = 2;
 
    cout << getNum(n, k);
 
    return 0;
}


Java




// Java implementation of the approach
class GFG
{
     
    // Function to convert decimal number n
    // to its binary representation
    // stored as an array arr[]
    static void decBinary(int arr[], int n)
    {
        int k = (int)(Math.log(n) /
                      Math.log(2));
         
        while (n > 0)
        {
            arr[k--] = n % 2;
            n /= 2;
        }
    }
     
    // Function to convert the number
    // represented as a binary array
    // arr[] into its decimal equivalent
    static int binaryDec(int arr[], int n)
    {
        int ans = 0;
        for (int i = 0; i < n; i++)
            ans += arr[i] << (n - i - 1);
        return ans;
    }
     
    // Function to return the updated integer
    // after flipping the kth bit
    static int getNum(int n, int k)
    {
     
        // Number of bits in n
        int l = (int)(Math.log(n) /
                      Math.log(2)) + 1;
     
        // Find the binary
        // representation of n
        int a[] = new int[l];
        decBinary(a, n);
     
        // The number of bits in n
        // are less than k
        if (k > l)
            return n;
     
        // Flip the kth bit
        a[k - 1] = (a[k - 1] == 0) ? 1 : 0;
     
        // Return the decimal equivalent
        // of the number
        return binaryDec(a, l);
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 56;
        int k = 2;
     
        System.out.println(getNum(n, k));
    }
}
 
// This code is contributed by AnkitRai01


Python




# Python implementation of the approach
import math
 
# Function to convert decimal number n
# to its binary representation
# stored as an array arr[]
def decBinary(arr, n):
    k = int(math.log2(n))
    while (n > 0):
        arr[k] = n % 2
        k = k - 1
        n = n//2
 
# Function to convert the number
# represented as a binary array
# arr[] its decimal equivalent
def binaryDec(arr, n):
    ans = 0
    for i in range(0, n):
        ans = ans + (arr[i] << (n - i - 1))
    return ans
 
# Function to concatenate the binary
# numbers and return the decimal result
def getNum(n, k):
 
    # Number of bits in both the numbers
    l = int(math.log2(n)) + 1
 
    # Convert the bits in both the gers
    # to the arrays a[] and b[]
    a = [0 for i in range(0, l)]
 
    decBinary(a, n)
    # The number of bits in n
    # are less than k
    if(k > l):
        return n
 
    # Flip the kth bit
    if(a[k - 1] == 0):
        a[k - 1] = 1
    else:
        a[k - 1] = 0
 
    # Return the decimal equivalent
    # of the number
    return binaryDec(a, l)
 
# Driver code
n = 56
k = 2
 
print(getNum(n, k))
 
# This code is contributed by Sanjit_Prasad


C#




// C# implementation of the approach
using System;
 
class GFG
{
     
    // Function to convert decimal number n
    // to its binary representation
    // stored as an array []arr
    static void decBinary(int []arr, int n)
    {
        int k = (int)(Math.Log(n) /
                      Math.Log(2));
         
        while (n > 0)
        {
            arr[k--] = n % 2;
            n /= 2;
        }
    }
     
    // Function to convert the number
    // represented as a binary array
    // []arr into its decimal equivalent
    static int binaryDec(int []arr, int n)
    {
        int ans = 0;
        for (int i = 0; i < n; i++)
            ans += arr[i] << (n - i - 1);
        return ans;
    }
     
    // Function to return the updated integer
    // after flipping the kth bit
    static int getNum(int n, int k)
    {
     
        // Number of bits in n
        int l = (int)(Math.Log(n) /
                      Math.Log(2)) + 1;
     
        // Find the binary
        // representation of n
        int []a = new int[l];
        decBinary(a, n);
     
        // The number of bits in n
        // are less than k
        if (k > l)
            return n;
     
        // Flip the kth bit
        a[k - 1] = (a[k - 1] == 0) ? 1 : 0;
     
        // Return the decimal equivalent
        // of the number
        return binaryDec(a, l);
    }
     
    // Driver code
    public static void Main(String[] args)
    {
        int n = 56;
        int k = 2;
     
        Console.WriteLine(getNum(n, k));
    }
}
 
// This code is contributed by PrinciRaj1992


Javascript




<script>
    // javascript implementation of the approach
 
    // Function to convert decimal number n
    // to its binary representation
    // stored as an array arr[]
    function decBinary(arr, n)
    {
      let k = parseInt(Math.log2(n), 10);
        while (n > 0)
        {
            arr[k--] = n % 2;
            n = parseInt(n/2,10);
        }
    }
 
    // Function to convert the number
    // represented as a binary array
    // arr[] into its decimal equivalent
    function binaryDec(arr, n)
    {
        let ans = 0;
        for (let i = 0; i < n; i++)
            ans += arr[i] << (n - i - 1);
        return ans;
    }
 
    // Function to return the updated integer
    // after flipping the kth bit
    function getNum(n,k)
    {
 
        // Number of bits in n
        let l = parseInt(Math.log2(n),10) + 1;
 
        // Find the binary
        // representation of n
        let a =  new Array(l);
        a.fill(0);
        decBinary(a, n);
 
        // The number of bits in n
        // are less than k
        if (k > l)
            return n;
 
        // Flip the kth bit
        a[k - 1] = (a[k - 1] == 0) ? 1 : 0;
 
        // Return the decimal equivalent
        // of the number
        return binaryDec(a, l);
    }
 
    let n = 56, k = 2;
    document.write(getNum(n, k));
     
    // This code is contributed by vaibhavrabadiya117.
</script>


Output: 

40

 

Time Complexity: O(log(m) + log(n))

Auxiliary Space: O(log(m) + log(n))

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments