这个题简单来说就是把一个数转成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; }
总结:这个题和前两个没啥区别,会字符串和进制转换就可以轻松过掉。