洛谷-P1100 高低位交换

洛谷-P1100 高低位交换

原题链接:https://www.luogu.com.cn/problem/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;
}
posted @ 2020-12-27 13:29  yuzec  阅读(202)  评论(0编辑  收藏  举报