大佬求助
  • 板块题目总版
  • 楼主ZHY182
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/28 21:55
  • 上次更新2024/3/29 12:49:17
查看原帖
大佬求助
846643
ZHY182楼主2024/3/28 21:55

题目描述

给出一个小于2的32次方的非负整数。这个数可以用一个32位的二进制数表示(不足32位用0补足)。我们称这个二进制数的前16位为“高位”,后16位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制示)。

例如,数 13145201314520 用二进制表示为 0000000000010100000011101101000(添加了11个前导0补足为32位),其中前16位为高位,即0000000000010100;后16位为低位,即0000111011011000。将它的高低位进行交换,我们得到了一个新的二进制数00001110110110000000000000010100。它即是十进制的249036820。

输入格式

一个小于2的32次方的非负整数

输出格式

将新的数输出

输入输出样例

1314520

249036820

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[32],p=31,b[32],c[16],d[16],x=2,zh2[105],ans=0,w=1;
void zh1(int k){
	if(k>=2){
		zh1(k/2);
		k%=2;
		a[p]=k;
		p--;
	}else{
		a[p]=k;
		p--;
	}
	return; 
}
int main(){
	cin>>n;
	for(int i=0;i<16;i++)c[i]=d[i]=a[i]=b[i]=0;
	for(int i=16;i<32;i++)a[i]=b[i]=0;
	zh1(n);
	for(int i=31,j=30-p;i>p;i--,j--)b[j]=a[i];
	cout<<endl;
	for(int i=31,j=0;i>15;i--,j++)c[j]=b[i];
	for(int i=15,j=0;i>=0;i--,j++)d[j]=b[i];
	for(int i=0;i<=15;i++)a[i]=d[i];
	for(int i=0,j=16;i<=15;i++,j++)a[j]=c[i];
    for(int i=31;i>=0;i--)zh2[31-i]=a[i]-'0';
    for(int i=0;i<33;i++){
        ans+=w*zh2[i];
        w*=x;
    }
    cout<<ans;
	return 0;
}
2024/3/28 21:55
加载中...