集训作业 洛谷P1100 高低位交换

这个题简单来说就是把一个数转成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;
}

总结:这个题和前两个没啥区别,会字符串和进制转换就可以轻松过掉。

原文地址:https://www.cnblogs.com/lichangjian/p/12853321.html