问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
资源限制
时间限制:1.0s 内存限制:512.0MB
思路:
1,本题代码是个人参考网上大佬的博客,经过我几个小时的奋战,现在差不多都明白了。(点击查看大佬博客)
2,这题的总体思路是:用Java自带的进制转化功能将十六进制转化位二进制,在将二进制转化位八进制。其中十六进制转化位二进制需要先转为十进制,再由十进制转化为二进制。
另外因为题目说给出的十六进制数长度不会超过十万,而Java自带的进制转化功能只用于长度较小的进制之间的转化,所以此时需要将十六进制分割成无数个四位数的二进制。
3,别漏掉了题目给出的“注意”:
——————————————以上就是思路,以下就是思路的讲解——————————————
讲解:
1,先了解一下Java自带的进制转化功能:
//十进制转化为十六进制
String Decimal1 = Integer.toHexString(100);
//十进制转化为八进制
String Decimal2 = Integer.toOctalString(100);
//十进制转化为二进制
String Decimal3 = Integer.toBinaryString(8);
//十六进制转化为十进制
String Hexdecimal = Integer.valueOf("100",16).toString();
//八进制转化为十进制
String Octonary = Integer.valueOf("100",8).toString();
//二进制转化为十进制
String Binary = Integer.valueOf("1000",2).toString()