游客 Signup | Login
中文 | En

1282 - C语言12.4

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

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

Input

一个32位无符号整数。

Output

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

请注意行尾输出换行。

Examples

Input

63

Output

42

Solution 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;
}

Solution 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;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题