Hallar el complemento a uno de un entero – Part 1

Dado un entero n, encuentra el complemento a uno del entero. 
Ejemplos: 
 

Input  : n = 5
Output : 2

Input  : n = 255
Output : 0

Input  : n = 26
Output : 5

Enfoque básico:

El enfoque ingenuo para resolver el problema sería convertir primero el número dado en su representación binaria y luego cambiar cada 1 a 0 y 0 a 1. Después de cambiar todos los 0 y 1, convierta la representación binaria en número.

Implementación del enfoque anterior:

C++

// CPP program to find 1's complement of n.
#include <bits/stdc++.h>
using namespace std;
 
unsigned int onesComplement(unsigned int n)
{
    vector<int> v;
    // convert to binary representation
    while (n != 0) {
        v.push_back(n % 2);
        n = n / 2;
    }
    reverse(v.begin(), v.end());
    // change 1's to 0 and 0's to 1
    for (int i = 0; i < v.size(); i++) {
        if (v[i] == 0)
            v[i] = 1;
        else
            v[i] = 0;
    }
    // convert back to number representation
    int two = 1;
    for (int i = v.size() - 1; i >= 0; i--) {
        n = n + v[i] * two;
        two = two * 2;
    }
    return n;
}
 
int main()
{
    unsigned int n = 22;
    cout << onesComplement(n);
    return 0;
}

Java

// Java program to find 1's complement of n.
 
import java.util.*;
 
class GFG {
    static int onesComplement(int n)
    {
        ArrayList<Integer> v = new ArrayList<Integer>();
        // convert to binary representation
        while (n != 0) {
            v.add(n % 2);
            n = n / 2;
        }
 
        Collections.reverse(v);
 
        // change 1's to 0 and 0's to 1
        for (int i = 0; i < v.size(); i++) {
            if (v.get(i) == 0)
                v.set(i, 1);
            else
                v.set(i, 0);
        }
        // convert back to number representation
        int two = 1;
        for (int i = v.size() - 1; i >= 0; i--) {
            n = n + v.get(i) * two;
            two = two * 2;
        }
        return n;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 22;
 
        // Function call
        System.out.println(onesComplement(n));
    }
}
 
// This code is contributed by phasing17

Python3

# Python3 program to find 1's complement of n.
def onesComplement(n):
    v = []
     
    # convert to binary representation
    while (n != 0):
        v.append(n % 2)
        n = n // 2
 
    v.reverse()
 
    # change 1's to 0 and 0's to 1
    for i in range(len(v)):
        if (v[i] == 0):
            v[i] = 1
        else:
            v[i] = 0
 
    # convert back to number representation
    two = 1
    for i in range(len(v) - 1, -1, -1):
        n = n + v[i] * two
        two = two * 2
 
    return n
 
# Driver code
n = 22
 
# Function call
print(onesComplement(n))
 
# This code is contributed by phasing17

Javascript

// JavaScript program to find 1's complement of n.
function onesComplement(n)
{
    let v = [];
     
    // convert to binary representation
    while (n != 0) {
        v.push(n % 2);
        n = Math.floor(n / 2);
    }
    v.reverse();
     
    // change 1's to 0 and 0's to 1
    for (var i = 0; i < v.length; i++) {
        if (v[i] == 0)
            v[i] = 1;
        else
            v[i] = 0;
    }
     
    // convert back to number representation
    let two = 1;
    for (let i = v.length - 1; i >= 0; i--) {
        n = n + v[i] * two;
        two = two * 2;
    }
    return n;
}
 
// Driver code
let n = 22;
console.log(onesComplement(n));
 
// This code is contributed by phasing17
Producción

9

Complejidad de tiempo: O (log n)

Espacio Auxiliar : O(log n)

Un enfoque eficiente para este problema es el siguiente: 
1. Encuentra el número de bits en el entero dado 
2. XOR el entero dado con 2^número_de_bits-1
 

C++

// CPP program to find 1's complement of n.
#include<bits/stdc++.h>
using namespace std;
 
unsigned int onesComplement(unsigned int n)
{
   // Find number of bits in the given integer
   int number_of_bits = floor(log2(n))+1;
 
   // XOR the given integer with poe(2,
   // number_of_bits-1 and print the result
   return ((1 << number_of_bits) - 1) ^ n;
}
 
int main()
{
  unsigned int n = 22;
  cout << onesComplement(n);
  return 0;
}

Java

// Java program to find 1's complement of n.
class GFG {
     
    static int onesComplement(int n)
    {
         
        // Find number of bits in the
        // given integer
        int number_of_bits =
               (int)(Math.floor(Math.log(n) /
                             Math.log(2))) + 1;
 
        // XOR the given integer with poe(2,
        // number_of_bits-1 and print the result
        return ((1 << number_of_bits) - 1) ^ n;
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int n = 22;
         
        System.out.print(onesComplement(n));
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# Python3 program to find
# 1's complement of n.
import math
 
def onesComplement(n):
 
    # Find number of bits in
    # the given integer
    number_of_bits = (int)(math.floor(math.log(n) /
                                math.log(2))) + 1;
 
    # XOR the given integer with poe(2,
    # number_of_bits-1 and print the result
    return ((1 << number_of_bits) - 1) ^ n;
 
# Driver code
n = 22
print(onesComplement(n))
 
# This code is contributed by Anant Agarwal.

C#

// C# program to find 1's complement of n.
using System;
 
class GFG {
     
    static int onesComplement(int n)
    {
         
       // Find number of bits in the given integer
       int number_of_bits = (int)(Math.Floor(
                   Math.Log(n) / Math.Log(2))) + 1;
      
       // XOR the given integer with poe(2,
       // number_of_bits-1 and print the result
       return ((1 << number_of_bits) - 1) ^ n;
    }
     
    //Driver code
    public static void Main ()
    {
         
        int n = 22;
         
        Console.WriteLine(onesComplement(n));
    }
}
 
// This code is contributed by Anant Agarwal.

PHP

<?php
// PHP program to find 1's
// complement of n.
 
function Log2($x)
{
    return (log10($x) / log10(2));
}
 
function onesComplement($n)
{
     
// Find number of bits in
// the given integer
$number_of_bits = floor(log2($n)) + 1;
 
// XOR the given integer with
// number_of_bits-1 and print the result
return ((1 << $number_of_bits) - 1) ^ $n;
}
 
// Driver Code
$n = 22;
echo onesComplement($n);
 
// This code is contributed by ihritik
?>

Javascript

<script>
 
// Javascript program to find
// 1's complement of n.
 
// Function to check whether a
// number is power of 2 or not
function onesComplement(n)
    {
           
        // Find number of bits in the
        // given integer
        let number_of_bits =
               (Math.floor(Math.log(n) /
                           Math.log(2))) + 1;
   
        // XOR the given integer with poe(2,
        // number_of_bits-1 and print the result
        return ((1 << number_of_bits) - 1) ^ n;
    }
 
// driver program
 
    let n = 22;
           
    document.write(onesComplement(n));
             
</script>
Producción

9

Complejidad de tiempo: O (log n)

Espacio Auxiliar : O(1)
 

 
Este artículo es una contribución de Amit SK . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *