十六进制转八进制
常规思路
十六进制先转为二进制,二进制再转为八进制数
遍历十六进制字符串,通过hash映射,转换为对应的二进制串,再三位一组确定一个八进制数( 注意 判断是否满足三位一组,不满足的时候缺几位就补多少个零,最后如果八进制数最高位为0的话要把零去掉)
注意问题
在对二进制转换为八进制数时,千万要注意数的范围,如果超出java基本的整数数据类型,要使用字符串来代替,否者就有溢出危险。
//二转八
public static String BINtoOCT(String str){
// 三位二进制合并为一个八进制数
int wei = str.length() % 3 ;
StringBuffer ans = new StringBuffer("");
if(wei == 0){
//不作处理
} else if (wei == 1){
//补一个零
str="00"+str;
} else {
//补两个零
str= "0"+str;
}
//转换
for (int i = 0; i <= str.length() - 3; i = i + 3){
int x = map2.get(str.substring(i, i+3));
//超出int范围,更超出lang的范围
// if(i == 0){
// ans = x;
// }else{
// ans = ans * 10 + x;
// }
ans.append(x);
}
String realAns = ans.toString();
if(realAns.charAt(0) == '0'){
realAns = realAns.substring(1,realAns.length());
}
return realAns;
}
读入数据问题
Scanner: next() nextLine()
- 前者读取一个字符串,字符串中间不能有空格,更不能有回车
- 后者一次读取一行,字符串中间可以有空格,以回车结束
注意: 如果连续读入多个字符串时,首先使用了前者,再使用后者读一行时,会导致前者紧接着的那个读取一行的方法读到,前者的结束标志符号
上次就碰到这个问题没有深入实验,这次又碰到了,终于解决了,哈哈哈!