试题 基础练习 十六进制转八进制

试题 基础练习 十六进制转八进制

import java.util.Scanner;
public class Main {
// TODO Auto-generated method stub
  //第一步:十六进制转换二进制。
  //第二部:二进制转换八进制。
  Scanner scn = new Scanner(System.in);//输入个数
  int num = scn.nextInt();
  
  for(int i=0;i<num;i++) {//输入需要转换的十六进制并进行转换
   String xx;
   String six = scn.next(); //获取16进制
   String newx = changetwo(six);//转化成二进制
   System.out.println(changeight(newx));//转化成八进制并输出;
 
  }

}
public static String changetwo(String a) {//转换成二进制
  StringBuffer aa = new StringBuffer();
  for(int i=0;i<a.length();i++) {
   switch(a.charAt(i)) {
  	case '0' : {aa.append("0000"); break;}
   	case '1' : {aa.append("0001"); break;}
   	case '2' : {aa.append("0010"); break;}
   	case '3' : {aa.append("0011"); break;}
   	case '4' : {aa.append("0100"); break;}
   	case '5' : {aa.append("0101"); break;}
   	case '6' : {aa.append("0110"); break;}
   	case '7' : {aa.append("0111"); break;}
   	case '8' : {aa.append("1000"); break;}
   	case '9' : {aa.append("1001"); break;}
   	case 'A' : {aa.append("1010"); break;}
   	case 'B' : {aa.append("1011"); break;}
   	case 'C' : {aa.append("1100"); break;}
   	case 'D' : {aa.append("1101"); break;}
   	case 'E' : {aa.append("1110"); break;}
   	case 'F' : {aa.append("1111"); break;}
   	default:break;
   }
  }
  return aa.toString();//返回转换完成的二进制。
 }

public static String changeight(String  a) {//转换成八进制
StringBuffer x = new StringBuffer();
  String xx = "";//用于保存每次获取的三个字符
  //判断能否整除三,如果不能在前面补齐0
  if(a.length()%3==1) {
   a = "00" + a;
  }
  if(a.length()%3==2) {
   a = "0" + a;
  }

  int num= 0 ;//判断是否满足三个
  int flage = 0;//判断先出来的是0;
  for(int i=0;i<a.length();i++) {
   xx += a.charAt(i);//获取字符
   
   if(num == 2) {
    
    
    if(flage==0&&xx.equals("000")) {//如果开始为八进制的0的话就不添加到八进制当中去。
     
    }
    else {
     flage=1;
     switch(xx) {
     	case "000" : {x.append("0"); break;}
     	case "001" : {x.append("1"); break;}
     	case "010" : {x.append("2"); break;}
     	case "011" : {x.append("3"); break;}
     	case "100" : {x.append("4"); break;}
     	case "101" : {x.append("5"); break;}
     	case "110" : {x.append("6"); break;}
     	case "111" : {x.append("7"); break;}
     	default:break;
      
    }
    }
    xx = "";
    num = 0;
   }
   else
    num++;
   
  }
  
  return x.toString();
 }
}

作为一个新手这道题坑了我好久。每次提交代码总是出现运行超时。我就去查看了别人的代码才发现字符串拼接的时候用+好和使用StringBuffer的append()方法进行拼接的时候所使用的时间不同,使用+号进行拼接比使用append()方法拼接所使用的时间多。
参考文章:https://blog.csdn.net/m0_37589327/article/details/78605268

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值