您的位置:首页 > 编程语言 > Java开发

java 练习 -蓝桥杯-十六进制转八进制

2014-03-05 22:24 387 查看
import java.util.Scanner;
public class Main {

public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String[] st=new String
;
for(int i=0;i<n;i++)
{
st[i] =sc.next();
}
sc.close();
for(int i=0;i<n;i++)
{
String str1=ttos(st[i]);

int len_str1=str1.length();
if(len_str1%3==1)str1="00"+str1;
else if(len_str1%3==2)str1="0"+str1;
ttoe(str1);
System.out.println();
}

}

public static String ttos(String  str)
{
int len_str=str.length();
StringBuilder str2=new StringBuilder();
for(int i=0;i<len_str;++i)
{
switch(str.charAt(i))
{
case '0':str2.append("0000");break;
case '1':str2.append("0001");break;
case '2':str2.append("0010");break;
case '3':str2.append("0011");break;
case '4':str2.append("0100");break;
case '5':str2.append("0101");break;
case '6':str2.append("0110");break;
case '7':str2.append("0111");break;
case '8':str2.append("1000");break;
case '9':str2.append("1001");break;
case 'A':str2.append("1010");break;
case 'B':str2.append("1011");break;
case 'C':str2.append("1100");break;
case 'D':str2.append("1101");break;
case 'E':str2.append("1110");break;
case 'F':str2.append("1111");break;
default:break;
}
} return str2.toString();
}
public static void ttoe(String str2)
{
int len=str2.length();
int a;
a=(str2.charAt(0)-'0')*4+(str2.charAt(1)-'0')*2+(str2.charAt(2)-'0');
if(a!=0)System.out.print(a);
for(int i=3;i<=len-2;i+=3)
{
a=(str2.charAt(i)-'0')*4+(str2.charAt(i+1)-'0')*2+(str2.charAt(i+2)-'0');
System.out.print(a);
}

}
}


思路分析:

题目要求输入n个十六进制的数进行转换,因N不超过10,可以用字符串数组进行存储,然后依次进行转换。

函数:

1.      public static Stringttos(String  str) 传递保存在字符串数组的的字符串,目的将16进制,转换成二进制字符串(三位二进制数对应一个8进制数)。函数返回转换后的二进制字符串。使用StringBuilder 效率更高效

 

2.      接着需要将二进制字符串转换成八进制,在此之前需要进行小小的调整

 

需要将字符串长度调整为3的倍数,方便转换,考虑到从尾部开始计算,需要借助数组或其他的集合进行存储,无法满足题目的运行要求;

3   于是考虑从头部做文章,记二进制字符串长度为len;当len%3=0时刚好方便转换,

当len%3=1时,试想最后剩余第一位数str.chatAt(0)单独转换,考虑在前面补上“00”后,

可以全部三位一起转换,且不影响最终结果,当len%3=2时同理补上“0”;

4   public static void ttoe(String str2)将处理过的二进制字符转转换成八进制,并且进行边转换边输出,提高效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 练习题