问题描述
输入一个无符号整数n(unsigned int类型),n可以用一个32位的二进制数表示(不足32位用0补足),我们称这个二进制数的前16位为“高位”,后16位为“低位”,输出将n的高位和低位交换后的值(用十进制表示)。
例如:输入1314520,它的二进制表示为0000 0000 0001 0100 0000 1110 1101 1000(添加了11个0补足为32位),其中前16位为高位,即0000 0000 0001 0100;后16位为低位,即0000 1110 1101 1000。将它的高低位进行交换,得到了一个新的二进制数0000 1110 1101 1000 0000 0000 0001 0100,它对应的十进制数为249036820,所以输出249036820。
样例输入
1314520
样例输出
249036820
package 算法训练;
import java.util.Scanner;
public class ALGO477 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
sc.close();
String bstr = Long.toBinaryString(n);
int fix = 32 - bstr.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fix; i++) {
sb.append('0');
}
sb.append(bstr);
sb.toString();
String a = sb.substring(0,16);
String b = sb.substring(16);
StringBuilder ans = new StringBuilder();
ans.append(b);
ans.append(a);
String x = ans.toString();
int res = Integer.parseInt(x,2);
System.out.println(res);
}
}