万水千山走过

导航

二进制转为八进制和十六进制

/*思想:由于三(四)位二进制等于一位八(十六)进制 。找到毗邻数组长度最小的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);
  }
}

  

posted on 2020-02-15 15:50  万水千山走过  阅读(387)  评论(0编辑  收藏  举报