这个题简单来说就是把一个数转成32位的2进制数,不够的补0。然后把这个数的前半部分和后半部分互换,再计算结果。
思路简单明了,接下来是代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long a,b,shu[50],s=1,zshu;
int main()
{
scanf("%lld",&a);
while(a!=0)//转换进制,会做1143的应该都会
{
shu[s]=a%2;
a/=2;
s++;
}
for(int i=32;i>=s;i--)//如果位数不够是要补0的
{
shu[i]=0;
}
for(int i=17;i<=32;i++)//互换了,第17位就是第1位。第1位就是第17位,然后就按照这个样子,转换进制就好啦。
{
zshu+=shu[i]*pow(2,i-17);
}
for(int i=1;i<=16;i++)
{
zshu+=shu[i]*pow(2,i+15);
}
printf("%lld",zshu);
return 0;
}
总结:这个题和前两个没啥区别,会字符串和进制转换就可以轻松过掉。