欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷 P1100 高低位交换

程序员文章站 2022-07-12 16:08:29
...

菜鸟生成记(32)

水题一个,但是刷着很爽!

P1100 高低位交换

#include<stdio.h>
#include<math.h>
#define ll long long//定价代换ll 代替long long
void sw(int *a,int *b)//自定义数值交换函数 
{//在自定义函数中传地址才能交换变量数值;
//传值(副本)不能交换变量数值
	int t;
	t=*a;
	*a=*b;
	*b=t;
}
void fun(ll n)
{
	int a[32]={0};
	ll sum=0;
	int x=32;
	int k=0;
	while(n)//n一直对2取余,进而求出二进制数 
	{
		a[k++]=n%2;
		n/=2;
	}
	for(int i=0;i<32/2;i++)//高位与低位交换(前16位与后16位交换) 
	{
		sw(&a[i],&a[16+i]);//a[i],a[16+i]数值交换
	}
	for(int j=0,i=0;i<=31;i++,j++)//二进制数转化为十进制数 
	{//按权展开 
		sum+=pow(2,j)*a[i];
	}
	printf("%lld",sum);//输出高低位交换后的数
	//sum定义成long long,因为高低交换后数值有可能大于int 
}
int main()
{
	ll n=1314520;
	scanf("%lld",&n);
	fun(n);
	return 0;
}
相关标签: c语言