Desplazamientos cíclicos del entero N por otro entero m

Dado un número entero N representado como una representación binaria de X = 16 bits. También se nos da un número ‘m’ y un carácter c que es L o R. La tarea es determinar un número M que se genera después de desplazar cíclicamente la representación binaria de N por m posiciones hacia la izquierda si c = L o hacia la derecha si c = R.
Ejemplos:
 

Entrada: N = 7881, m = 5, c = L 
Salida: 55587 
Explicación: 
N en binario es 0001 1110 1100 1001 y desplazándolo a la izquierda 5 posiciones, se convierte en 1101 1001 0010 0011 que en el sistema decimal es 55587.
Entrada: N = 7881, m = 3, c = R 
Salida: 9177 
Explicación: 
N en binario es 0001 1110 1100 1001 y desplazado 3 posiciones a la derecha, se convierte en 0010 0011 1101 1001 que en el sistema decimal es 9177. 
 

Enfoque:
Para resolver el problema mencionado anteriormente, observamos que tenemos que desplazar el número por m a la derecha si el carácter es R, de lo contrario, haremos un desplazamiento por m a la izquierda si el carácter es L, donde el desplazamiento a la izquierda equivale a multiplicar un número por 2, los desplazamientos a la derecha equivalen a dividir un número por 2.
A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ implementation of the approach
#include<bits/stdc++.h>
using namespace std;
 
// Cyclic shifts of integer N by another integer m
void Count(int N, int m, char turn)
{
  // str represents bitwise representation of N
  string str = bitset<16>(N).to_string();
   
  m%=(int)str.size();
   
  // rotate the string by a specific count
  if(turn=='R')
    str = str.substr((int)str.size()-m) + str.substr(0,(int)str.size());
  else 
    str = str.substr(m) + str.substr(0,m);
   
  // printing the number represented by the bitset
  // in str
  cout << bitset<16> (str).to_ulong() << '\n';
}
 
int main()
{
  int N = 7881 ;
  int m = 5;
  char turn = 'L';
  Count(N,m,turn);
}

Python3

# Python implementation to make
# Cyclic shifts of integer N by another integer m
 
def Count(N, count, turn):
    # Convert N into hexadecimal number and
    # remove the initial zeros in it
    N = hex(int(N)).split('x')[-1]
     
    # Convert hexadecimal term binary
    # string of length = 16 with padded 0s
    S = ( bin(int(N, 16))[2:] ).zfill(16)
     
    
    # rotate the string by a specific count
    if(turn == 'R'):
        S = (S[16 - int(count) : ] + S[0 : 16 - int(count)])
         
    else:
        S = (S[int(count) : ] + S[0 : int(count)])
         
    # Convert the rotated binary string
    # in decimal form, here 2 means in binary form.
    print(int(S, 2))
     
# driver code
N = 7881
count = 5
turn = 'L'
 
Count(N, count, turn)
Producción: 

55587

 

Complejidad de tiempo: O(n)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por UtkarshSharma4 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 *