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)
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