二进制循环移位问题
来源:互联网 发布:unity3d 摇杆控制角色 编辑:程序博客网 时间:2024/06/05 04:00
循环移位
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;
}
}
阅读全文
1 0
- 二进制循环移位问题
- 数组循环移位问题
- 数组循环移位问题
- 字符串 --- 循环移位问题
- 循环移位问题
- 数组循环移位问题
- 字符串循环移位包含问题
- UVaLive/LA 6809 Spokes Wheel(搜索,二进制循环移位)
- 排序数组循环移位后查找问题
- 一个简单的循环移位问题
- 字符串——循环移位包含问题
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 循环移位
- 洛谷1563(NOIP2016)[玩具谜题]--模拟
- java线程池
- 【codevs 1069】关押罪犯
- GP强制中断会话
- [BZOJ1799][AHOI2009]同类分布 数位DP+记忆化搜索
- 二进制循环移位问题
- ionic小案例
- 致批驳哥德尔不完全性定理者
- 缩点+树上差分——Codeforces555E Case of Computer Network
- C语言最大的乘积问题
- 51 Nod(1459 迷宫游戏)(dijkstra)
- angular之service
- ajax传值
- JavaScript之创建对象的方式