十六进制转八进制数
来源:互联网 发布:foreach遍历二维数组 编辑:程序博客网 时间:2024/05/19 12:24
问题描述:给定n个十六进制正整数,输出它们对应的八进制数。输入的第一行为一个正整数n (1<=n<=10)。接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
刚开始想着,java中Integer类不是提供了进制的转化方法么,直接将输入的16进制先转化成十进制数,在将十进制数转化为2进制数就好了。但是程序的运行错误,看了别人的思路,发现了问题是:输入的16进制数太大(16进制数的长度不超过100000),造成该类的方法不可用,而且不能存储下这么大的数字,因此只能另找办法。
看了别人的思路,恍然大悟,只能将输入转化为二进制,在将二进制转化为八进制字符串。将其按字符串处理,不用担心数据的存储问题了。
具体步骤:
①将输入的字符串转化成对应的二进制字符串,每个字符转化成对应的二进制占4位,如”10”转化为”00010000”。
②因为8进制数只需要3位来表示,我们要调整字符的位数,具体做法是在字符串最前面添加“0”,直到位数是3的倍数。
③将二进制字符串按3位分别转化为对应的八进制字符串。如”010”转化为2。
下面是我的代码。
import java.util.HashMap;import java.util.Scanner;import java.lang.Integer;public class Main{ public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n; //个数 int i; int j; int k; //循环变量 int num; //临时变量 String out[]; //输出结果数组 String str; StringBuffer s1 = new StringBuffer(); //转化的二进制字符串 StringBuffer result = new StringBuffer(); //最终的8进制数 HashMap<Character, String> hashMap=new HashMap<Character, String>(); hashMap.put('0', "0000"); hashMap.put('1', "0001"); hashMap.put('2', "0010"); hashMap.put('3', "0011"); hashMap.put('4', "0100"); hashMap.put('5', "0101"); hashMap.put('6', "0110"); hashMap.put('7', "0111"); hashMap.put('8', "1000"); hashMap.put('9', "1001"); hashMap.put('A', "1010"); hashMap.put('B', "1011"); hashMap.put('C', "1100"); hashMap.put('D', "1101"); hashMap.put('E', "1110"); hashMap.put('F', "1111"); n=scanner.nextInt(); out=new String[n]; for ( i= 0; i < n; i++) { str=scanner.next(); for (j = 0; j < str.length(); j++) { s1=s1.append(hashMap.get(str.charAt(j))); } //补全长度为3的倍数,方便转化成8进制数 while (s1.length()%3!=0) { s1.insert(0, "0"); } //取3位子串先将其转化成10进制,在转化成8进制 for (k = 0; k <= s1.length()-3; k=k+3) { //取3位转化成十进制后在转化为2进制,最后添加到结果字符串后 num=Integer.valueOf(s1.substring(k,k+3), 2); result=result.append(Integer.toOctalString(num).toString()); } //如果结果第一个字符是0,删除 if (result.charAt(0)=='0') { result.deleteCharAt(0); } out[i]=result.toString(); //清空stringBuffer s1.delete(0, s1.length()); result.delete(0, result.length()); } for (String string : out) { System.out.println(string); } }}
阅读全文
1 0
- 十六进制转八进制数
- 十六进制转八进制数
- 十六进制数转八进制数
- 十六进制数转八进制 大数转化
- 十六进制转八进制最高可输入十万位十六进制数
- 十进制数转二进制、八进制、十六进制数Java代码
- 二进制、八进制、十六进制[转]
- 蓝桥杯 十六进制转八进制
- 蓝桥杯--十六进制转八进制。。。
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 十六进制转八进制
- 练习 十六进制转八进制
- 30个项目扎堆路演 腾讯众创空间创业营“学前班”深圳开学
- 关于Win7 x64下过TP保护(应用层)
- 解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题
- Linux系统学习之初
- 手机连电脑中双重木马 腾讯两管家联手查杀
- 十六进制转八进制数
- HDU Strange fuction 1597
- 顺序表应用8:最大子段和之动态规划法
- 速7代言够快才畅快vivo X6?范·迪塞尔或出席30日发布会
- 绿地金服首家入驻360你财富开放平台 重磅“梦想计划”护航
- 京东、海尔、联想之星齐聚萧山,硬件创业者的盛会!
- 伪共享(False Sharing)
- 机器学习—CART决策树算法详解
- JS基础学习