洛谷-P1100 高低位交换
题目描述
给出一个小于(2^{32})的正整数。这个数可以用一个(32)位的二进制数表示(不足(32)位用(0)补足)。我们称这个二进制数的前(16)位为“高位”,后(16)位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。
例如,数(1314520)用二进制表示为(0000 0000 0001 0100 0000 1110 1101 1000)(添加了(11)个前导(0)补足为(32)位),其中前(16)位为高位,即(0000 0000 0001 0100);后(16)位为低位,即(0000 1110 1101 1000)。将它的高低位进行交换,我们得到了一个新的二进制数(0000 1110 1101 1000 0000 0000 0001 0100)。它即是十进制的(249036820)。
输入格式
一个小于(2^{32})的正整数
输出格式
将新的数输出
输入输出样例
输入 #1
1314520
输出 #1
249036820
C++代码
#include <iostream>
#include <cmath>
using namespace std;
int a[35];
int main() {
long long n, m=0;
cin >> n;
for (int i=32; i>0&&n!=0; --i) {
a[i] = n % 2;
n /= 2;
}
for (int i=16; i>0; --i)
m += a[i] * pow(2, 16-i);
for (int i=32; i>16; --i)
m += a[i] * pow(2, 48-i);
cout << m << endl;
return 0;
}