16 条题解

  • -1
    @ 2021-11-23 22:57:14

    1.int型最多存储31位整形[即正负数都有,范围在-2312^{31} 2312^{31}-1],而unsigned int也是31位,但是存储的是正整数[范围是11 2322^{32}-1]。

    2.C++运算中,若出现溢出,则 自动取模 。举个例子:在unsigned int型当中,计算2322^{32}+400时,实际的运算是(2322^{32}+400)%2322^{32},结果就是400.

    综合以上几点,能不能发现什么呢?

    问题让我们求的其实是2进制下交换前后16位,不就是向左移16位(根据上文2.),加上右移16位吗?

    代码如下

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int main(){
        unsigned int n;
        cin>>n;
        cout<< (n<<16)+(n>>16);
        return 0;
    }
    

    信息

    ID
    1219
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    516
    已通过
    238
    上传者