循环移位
Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 2516, Total Submissions: 3693
Description
编写函数实现value左右循环移位(即移出的位在另一端填入)。函数原型为int move(int value,int n);其中value为要循环移位的数,n为移位的位数,n的绝对值不大于16,整型为16位。如果n<0表示左移,n>0表示右移,n=0表示不移位。在主函数中输入数据并调用该函数输出结果。
Input
输入value和n,均为整型,用空格隔开
Output
-
Sample Input
134744064 -8
-
Sample Output
134742024
#include<stdio.h>
int main()
{
long int n,a[50],b[50],c[50],i=0,sum=0,d,j,k,m;
scanf("%ld%ld",&n,&m);
while(n)
{
d=n%2;
a[i]=d;
n=n/2;
i++;
}
if(a==0)
{
printf("%ld",n);
return 0;
}
for(j=0;j<i;j++)
{
c[j]=a[i-1-j];
}
if(m>0)
{
for(j=0;j<i;j++)
{
if(j<m)b[j]=c[j+i-m];
if(j>=m)b[j]=c[j-m];
}
d=1;
for(k=0;k<i;k++)
{
sum=sum+d*b[i-1-k];
d=d*2;
}
printf("%ld",sum);
return 0;
}
if(m<0)
{
m=-m;
for(j=0;j<i;j++)
{
if(j<i-m)b[j]=c[j+m];
if(j>=i-m)b[j]=c[j-i+m];
}
d=1;
for(k=0;k<i;k++)
{
sum=sum+d*b[i-1-k];
d=d*2;
}
printf("%ld",sum);
return 0;
}
}
int main()
{
long int n,a[50],b[50],c[50],i=0,sum=0,d,j,k,m;
scanf("%ld%ld",&n,&m);
while(n)
{
d=n%2;
a[i]=d;
n=n/2;
i++;
}
if(a==0)
{
printf("%ld",n);
return 0;
}
for(j=0;j<i;j++)
{
c[j]=a[i-1-j];
}
if(m>0)
{
for(j=0;j<i;j++)
{
if(j<m)b[j]=c[j+i-m];
if(j>=m)b[j]=c[j-m];
}
d=1;
for(k=0;k<i;k++)
{
sum=sum+d*b[i-1-k];
d=d*2;
}
printf("%ld",sum);
return 0;
}
if(m<0)
{
m=-m;
for(j=0;j<i;j++)
{
if(j<i-m)b[j]=c[j+m];
if(j>=i-m)b[j]=c[j-i+m];
}
d=1;
for(k=0;k<i;k++)
{
sum=sum+d*b[i-1-k];
d=d*2;
}
printf("%ld",sum);
return 0;
}
}