蓝桥杯算法题----十六进制转八进制

常规思路

十六进制先转为二进制,二进制再转为八进制数

遍历十六进制字符串,通过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()

  1. 前者读取一个字符串,字符串中间不能有空格,更不能有回车
  2. 后者一次读取一行,字符串中间可以有空格,以回车结束
    注意: 如果连续读入多个字符串时,首先使用了前者,再使用后者读一行时,会导致前者紧接着的那个读取一行的方法读到,前者的结束标志符号

上次就碰到这个问题没有深入实验,这次又碰到了,终于解决了,哈哈哈!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值