1282 - C语言12.4

编写一个函数,对一个32位的二进制数取出它左边数的奇数位(即从左边起的第1、3、5、…、31位),即取出的这些位保留原值,其余位为0。

请务必注意本题中的整数是32位无符号整数,输入和输出时可以使用%u进行处理。

题目输入

一个32位无符号整数。

题目输出

取出左数奇数位的函数返回结果。

请注意行尾输出换行。

输入/输出样例

题目输入

63

题目输出

42

C语言解答

#include <stdio.h>
int main(){
	int i;
	unsigned int n,tmp;
	while (scanf("%u",&n)==1)
	{
		tmp=1;
		i=15;
		while (i--)
		{
			n&=~tmp;
			tmp<<=2;
		}
		printf("%u\n",n);
	}
	return 0;
}

C++解答

#include <stdio.h>
int main() {
	unsigned int odd(unsigned int);
	unsigned int a;
	scanf("%u", &a);
	printf("%u\n", odd(a));
	return 0;
}
unsigned int odd(unsigned int a) {
	int i;
	unsigned int result = 0;
	for (i = 1;i <= 32;i += 2)
		result = result | (a & (1 << (32 - i)));
	return result;
}

时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题