# Cyclic shifts

## Problem:-

You are given a number

$N$

represented as a binary representation of

$X=16$

bits. You are also given a number

$m$

and a character

.
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 is

$c=R$

.
Input format

1. The first line contains an integer
$T$

representing the number of queries.

2. The next
$T$

lines contain

as mentioned in the problem statement.

Output format
Print

$T$

integers in a separate line representing the answer to each query.
Constraints

$1\le T\le 1e4\phantom{\rule{0ex}{0ex}}1\le N\le 65535\phantom{\rule{0ex}{0ex}}1\le m\le 15$

SAMPLE INPUT

`27881 5 L7881 3 R`
SAMPLE OUTPUT

`555879177`
Explanation

For first case :  N in binary is 0001 1110 1100 1001 and shifting it left by 5 position, it becomes 1101 1001 0010 0011 which in decimal system is 55587

For second case : N in binary is 0001 1110 1100 1001 and shifted 3 position to right it becomes 0010 0011 1101 1001 which in decimal system is 9177

Time Limit:1.0 sec(s) for each input file.
Memory Limit:256 MB
Source Limit:1024 KB

## solution:-

#include<stdio.h>
#include<math.h>
void main()
{
int t,i,m,x,a,b,j=0,d,p;
char c,c1;
long int n,s=0;
scanf(“%d”,&t);
for(i=1;i<=t;i++)
{
for(j=0;j<16;j++)
a[j]=0;
scanf(“%ld%d%c%c”,&n,&m,&c,&c1);
j=0;
while(n!=0)
{
x=n%2;
n=n/2;
a[j]=x;
j++;
}
for(j=0;j<16;j++)
b[j]=a[15j];
if(c1==‘R’)
{
for(j=15;j>=0;j–)
{
if((jm)>=0)
d[j]=b[(jm)];
else
{
d[j]=b[(jm)+16];
}
}
}
if(c1==‘L’)
{
for(j=0;j<16;j++)
d[j]=b[(j+m)%16];
}
p=15;
for(j=0;j<16;j++)
{
s=s+d[j]*pow(2,p);
p–;
}
printf(“%ldn”,s);
s=0;
}
}