十六进制转八进制(蓝桥)

算法会超时...但代码以及思路应该没错(16进制转化2进制再转化8进制)

错误原因

1、循环次数过多

2、switch语句使用过多

3、substring(0,3)这个只含开头不含结尾,因此截取是截取三个字符,从第一个到第三个字符,不包含第四个。

import java.util.*;
public class Main{

	public static void main(String[] args) 
	{
	  Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		String[] res = new String[n];
		for(int i=0;i<n;i++)
		{
			String temp = sc.nextLine();
			char[] n16_temp = new char[temp.length()];
			String[] n2 = new String[temp.length()];
			for(int j=0;j<temp.length();j++)
			{
        		n16_temp[j]=temp.charAt(j);     //n16_temp[j]=temp.charAt(j)+"";意味着n16得是字符串数组
				    //n16[j]=n16_temp[j]-'0';  //    
				    switch(n16_temp[j])
						{
							case '0':
							n2[j] = "0000";  
							break;
							
						  case '1':
							n2[j] = "0001";     //单引号和双引号,一般是区别字符和字符串,但是字符串也能是1个甚至0个字符 
							break;
							
						  case '2':
							n2[j] = "0010";
							break;
							
						  case '3':
							n2[j] = "0011";
							break;
							
						  case '4':
							n2[j] = "0100";
							break;
							
						 case '5':
							n2[j] = "0101";
							break;
							
							case '6':
							n2[j] = "0110";
							break;
							
							case '7':
							n2[j] = "0111";
							break;
							
							case '8':
							n2[j] = "1000";
							break;
							
							case '9':
							n2[j] = "1001";
							break;
							
							case 'A':
							n2[j] = "1010";
							break;
							
							case 'B':
							n2[j] = "1011";
							break;
							
							case 'C':
							n2[j] = "1100";
							break;
							
							case 'D':
							n2[j] = "1101";
							break;
							
							case 'E':
							n2[j] = "1110";
							break;
							
							case 'F':
							n2[j] = "1111";
							break;
						}
				}
			 if(4*temp.length()%3 != 0)
			 {
				  String temp_0 = new String();
			    int s=4*temp.length()%3;
				  switch(s)
					{
						case 1:
						temp_0 = "00" + n2[0];
						n2[0] = temp_0;
						break;
						
						case 2:
						temp_0 = "0" + n2[0];
						n2[0] = temp_0;
						break;
					}
			 }
			    int num_8 = 4*temp.length()/3;
			if(4*temp.length()%3 != 0)   {num_8++; }
			    String[] n8 = new String[num_8];
			    String n8_temp=Arrays.toString(n2);
			    char[] f = new char[num_8];
			    for(int z=0,m1=0,m2=2;z<num_8;z++)
					{
					   n8[z] = n8_temp.substring(m1,m2);
						 m1=m1+3;
					   m2=m2+3;
					
			switch(n8[z])
						{  
				
				      case "000":
							f[z] = '0';  
							break;
				
						  case "001":
							f[z] = '1';  
							break;
							
						  case "010":
							f[z] = '2';
							break;
							
						  case "011":
							f[z] = '3';
							break;
							
						  case "100":
							f[z] = '4';
							break;
							
						 case "101":
							f[z] = '5';
							break;
							
							case "110":
							f[z] = '6';
							break;
							
							case "111":
							f[z] = '7';
							break;	
			   }
						res[i] = Arrays.toString(f);
		   }
			
		}
			for(int i=0;i<n;i++)
		  System.out.println(res[i]);
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值