1283 - C语言12.5

通过次数

0

提交次数

0

时间限制 : 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)));
	}
}