问题描述:
输入n个数,请将其中的偶数的二进制反转。
eg:输入1 6 5
其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5.
结题思路:
思路就是先将输入数字中的偶数解析出来,然后再转String,记下当前二进制位数,然后反序右移32-len。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("输入数组:");
int n=scanner.nextInt();
int arr[]=new int[n]; //将输入存入数组
while(scanner.hasNext()) { //是否还有下一个输入项
for(int i = 0; i < arr.length; i++){
arr[i] = scanner.nextInt(); //获取下一个输入项
if(arr[i] %2 == 0) {
System.out.println("提取出偶数进行二进制翻转重新存入数组并且打印:");
int len=String.valueOf(Integer.toBinaryString(arr[i])).length();
//toBinaryString将整数转换为无符号数;valueOf返回参数的字符串表示形式;
//length返回字符串的长度;System.out.println(len)--输出是3;
String b = String.valueOf(Integer.toBinaryString(arr[i]));//System.out.println(b),输出是110;
arr[i] =(Integer.reverse(arr[i]))>>(32-len); //>>右移运算符
//reverse方法返回通过比特的反转顺序,指定int值的二进制补码表示法得到的值。
System.out.println(arr[i]+"\t");
}
}
}
scanner.close();
}
}
//输入数组:
//1 6 5
//提取出偶数进行二进制翻转重新存入数组并且打印:
//3