其他分享
首页 > 其他分享> > 洛谷-P1100 高低位交换

洛谷-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;
}

标签:P1100,0000,16,int,32,洛谷,二进制,高低,位为
来源: https://www.cnblogs.com/yuzec/p/14196999.html