把自己代码写完之后看了看网上别人的代码,最简便的无疑是用位移运算符,但是我不会。。。,最难的有几十行代码,而且好多人还真的去把数组位置变了一下,xxwl。
解题思路:
把数转化为二进制进数组,从数组的17个元素开始进行二进制到十进制的转化,进行到第三十二个元素的时候再进行1到16个元素的转化,多说无益,上代码:
#include<iostream>
#include<cmath>
using namespace std;
int ans[32], cnt;
long long n;
int main()
{
cin >> n;
while (n) {
ans[cnt++] = n % 2;
n /= 2;
}
for (int i = 16; i < 32; ++i) if (ans[i] != 0) n += pow(2, i - 16);
for (int i = 0; i < 16; ++i) if (ans[i] != 0) n += pow(2, i + 16);
cout << n;
return 0;
}