Given an integer N represented as a binary representation of X = 16 bits. We are also given a number ‘m’ and a character c which is either L or R. The task is to determine a number M that is generated after cyclically shifting the binary representation of N by m positions either left if c = L or right if c = R.
Examples:
Input : N = 7881, m = 5, c = L
Output : 55587
Explanation:
N in binary is 0001 1110 1100 1001 and shifting it left by 5 positions, it becomes 1101 1001 0010 0011 which in the decimal system is 55587.Input : N = 7881, m = 3, c = R
Output : 9177
Explanation:
N in binary is 0001 1110 1100 1001 and shifted 3 positions to right, it becomes 0010 0011 1101 1001 which in the decimal system is 9177.
Approach:
To solve the problem mentioned above we observe that we have to right shift the number by m if the char is R, else we will do a left shift by m if the char is L where left shifts is equivalent to multiplying a number by 2, right shifts is equivalent to dividing a number by 2.
Below is the implementation of the above approach:
# 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
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.