1283 - C语言12.5
时间限制 : 1 秒
内存限制 : 32 MB
编写一个函数,实现左右循环移位。函数名为move,调用方法为move(value, n)。其中value为需要循环位移的数,n为位移的位数。n<0表示为左移;n>0表示为右移。例如,n=4表示右移4位;n=-3表示左移3位。
请务必注意本题中的整数是32位无符号整数,输入和输出时可以使用%u进行处理。
题目输入
两个用空格隔开的整数,第一个为32位无符号整数value,第二个为整数n。保证n的绝对值不超过30。
题目输出
move(value, n)函数的返回结果。
请注意行尾输出换行。
输入/输出样例
输入格式
128 -3
输出格式
1024
C语言解答
#include <stdio.h> int main(){ int n; unsigned int v; // freopen("1.txt","r",stdin); while (scanf("%u %d",&v,&n)==2) { if (n>0) { printf("%u\n",(v>>n|v<<(32-n))); }else{ n*=-1; printf("%u\n",(v<<n|v>>(32-n))); } } // fclose(stdin); return 0; }
C++解答
#include <stdio.h> int main() { unsigned int move(unsigned int, int); unsigned int a; int n; scanf("%u %d", &a, &n); printf("%u\n", move(a, n)); return 0; } unsigned int move(unsigned int a, int n) { unsigned int temp; if (n < 0) { temp = a & (((1 << (-n)) - 1) << (32 + n)); return ((a << (-n)) | (temp >> (32 + n))); } else { temp = a & ((1 << n) - 1); return ((a >> n) | (temp << (32 - n))); } }