二进制转为八进制和十六进制
/*思想:由于三(四)位二进制等于一位八(十六)进制 。找到毗邻数组长度最小的3(4)的倍数,作为新数组长度。多余位数(高位)用0补齐。*/ public class PracticeDemo { public static void BtoOHex(int n,String s) { int m = s.length(); int sum0 = 0; //二进制转为十进制 System.out.print("输出的十进制数为:"); for(int i = 0;i < m;i++) { int c = s.charAt(i); int num = c >= '0'? c-'0' : null; sum0+= num*Math.pow(2,m-1-i); } System.out.println(); System.out.println(sum0+""); char[] ar = s.toCharArray();//将字符串转换为字符数组 for(int i = 0 ;i < 100;i++)//m为新求数组长度 { if(m%n == 0) //当n=3时是八进制转换;n=4时是十六进制转换 { break; } else m++; } char[] arr = new char[m]; for( int i = 0;i < m;i++) //添加'0' { if(i <= ar.length-1) { arr[m-1-i] = ar[s.length()-1-i]; //System.arraycopy(arr,0,ar,m-ar.length,ar.length); } else { arr[m-1-i] = '0'; } } if(n > 3) { System.out.println("输出十六制数为:"); } else { System.out.println("输出八制数为:"); } for(int i = 0;i < arr.length;i=i) //控制新数组位数 { int num = 0; int sum = 0; for(int j = n-1;j > -1;j--,i++)//用于3位求和或者4位求和 { if(n > 3) { num = arr[i] >= 'A'? arr[i]-'A'+10:arr[i] - '0'; } else { num = arr[i] >= '0'? arr[i]-'0':null; } sum += num * Math.pow(2,j); } if(n > 3) { if(sum > 9) { switch(sum) { case 10 : System.out.print("A");break; case 11 : System.out.print("B");break; case 12 : System.out.print("C");break; case 13 : System.out.print("D");break; case 14 : System.out.print("E");break; case 15 : System.out.print("F");break; } } else { System.out.print(sum+""); } } else { System.out.print(sum+""); } } } public static void main(String[] args) { Scanner in = new Scanner (System.in); System.out.println("输入二进制数:"); String s = in.nextLine(); int a = 3;//当a=3时为八进制转换,当a=4时十六进制转换, //int a = 4; BtoOHex(a,s); } }