华为招聘 —第二题

等题出来再补上吧!反正不知道这个对不对!心好累!
输入:
3
0x62 0x80 0x00
2
4
5
输出:
6
5
输入几个十六进制的数据:0x62 0x80 0x00
得到它的二进制码0110 0010 1000 0000 0000 0000
要解出的数据个数:2
占byte未个数:4 ——> 0110 = 6
占byte未个数:5 ——> 00101 = 5

/**
 * 
 测试用例:
输入:
3
0x62 0x80 0x00
2
4
5
输出:
6
5
*/
public class TestDemo3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);
        int a= scanner.nextInt();

        //将s变成数字,再转成二进制,并保留高位0
        String allstr="";
        for(int i=0;i<a;i++) {
            String  b = scanner.next();
            //十六->十进制
            int dec_num = Integer.decode(b);
            //十进制->二进制
            String bin_num = Integer.toBinaryString(dec_num);
            //保留高位0
            String str = String.format("%08d", Integer.valueOf(bin_num));
            //拼接
            allstr+=str;
        }

        //输入字符个数、位长度
        int a1= scanner.nextInt();
        int[] arr= new int[a1+1];
        arr[0]=0;
        for(int i=1;i<=a1;i++) {
            arr[i] = scanner.nextInt();
        }

        //截取字符,转成数字
        for(int i=0;i<a1;i++) {
            //这里arr[0]=0,注意每次截取的长度
            String str  = allstr.substring(arr[i], arr[i+1]+arr[i]);
            //二进制转十进制
            int arr_new = Integer.valueOf(str,2);
            System.out.println(arr_new);

        }

    }

}

猜你喜欢

转载自blog.csdn.net/hyeeee/article/details/79647572