当前位置: 首页 > news >正文

蓝桥杯-基础练习12 十六进制转八进制

基础练习 十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
先将十六进制数转换成某进制数,再由某进制数转换成八进制。


自己做这道题的时候也算曲折,花了好几天20多次0分后终于修成正果。现将一些编程过程中的小经验分享,本人非大牛,如有什么错误,敬请指正,有更好的方法也请赐教。

1.思路:16进制转2进制,再转8进制,我先转的10进制,数据小还 行,数据大了就game over了。(本题数据最大为10万位)
2.判断2进制的位数对3取模是多少,因为2到8是3位3位的看的。
3.删除最后数据前面的0(题目要求哈)。
4.我就死在这点上,测试数据不是一条条输入的,而是所有数据从文本读入,所以不能用Scanner,得用BufferedReader。
5.最后将StringBuffer转换为String输出,不然就是一直等待测评,我也不知道为什么,或许是我自己的问题吧。这里写图片描述
6.本题注意以下函数用法:
①BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
②int n = Integer.parseInt(in.readLine());
③a[i] = in.readLine();
④char[] temp = a[i].toCharArray();
⑤StringBuffer s2 = new StringBuffer();
⑥s2.append(“0000”);
⑦s3.append(s2.substring(0, 1));

原码奉上

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(
                new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        String a[] = new String[n];
        for (int i = 0; i < n; i++) {
            a[i] = in.readLine();
        }

        for (int i = 0; i < n; i++) {
            char[] temp = a[i].toCharArray();
            StringBuffer s2 = new StringBuffer();
            // 16 to 2
            int k = temp.length;
            for (int j = 0; j < k; j++) {
                switch (temp[j]) {
                case '0':
                    s2.append("0000");
                    break;
                case '1':
                    s2.append("0001");
                    break;
                case '2':
                    s2.append("0010");
                    break;
                case '3':
                    s2.append("0011");
                    break;
                case '4':
                    s2.append("0100");
                    break;
                case '5':
                    s2.append("0101");
                    break;
                case '6':
                    s2.append("0110");
                    break;
                case '7':
                    s2.append("0111");
                    break;
                case '8':
                    s2.append("1000");
                    break;
                case '9':
                    s2.append("1001");
                    break;
                case 'A':
                    s2.append("1010");
                    break;
                case 'B':
                    s2.append("1011");
                    break;
                case 'C':
                    s2.append("1100");
                    break;
                case 'D':
                    s2.append("1101");
                    break;
                case 'E':
                    s2.append("1110");
                    break;
                case 'F':
                    s2.append("1111");
                    break;
                }
            }
            // 2 to 8
            StringBuffer s3 = new StringBuffer();
            int m = 0;
            if (4 * k % 3 == 1) {
                s3.append(s2.substring(0, 1));
                m += 1;
            } else if (4 * k % 3 == 2) {
                switch (s2.substring(0, 2)) {
                case "01":
                    s3.append("1");
                    break;
                case "10":
                    s3.append("2");
                    break;
                case "11":
                    s3.append("3");
                    break;
                default:
                    break;
                }
                m += 2;
            }
            for (int j = m; j < 4 * k;) {
                switch (s2.substring(j, j + 3)) {
                case "000":
                    s3.append("0");
                    break;
                case "001":
                    s3.append("1");
                    break;
                case "010":
                    s3.append("2");
                    break;
                case "011":
                    s3.append("3");
                    break;
                case "100":
                    s3.append("4");
                    break;
                case "101":
                    s3.append("5");
                    break;
                case "110":
                    s3.append("6");
                    break;
                case "111":
                    s3.append("7");
                    break;
                }
                j += 3;
            }
            // delete 0
            // use delete(old is 0) or charAt

            if (s3.length() == 2 && s3.charAt(0) == '0') {// 0-->00-->delete 00-->notany
                System.out.println(s3.substring(1));
            } else {
                int q = 0;
                while (s3.charAt(q) == '0') {
                    q++;
                }
                String s = s3.toString();
                System.out.println(s3.substring(q));
            }
        }
    }
}

这里写图片描述

当然本题也可以将2进制每12位转换为8进制,这里就不赘述了。

如有什么问题,欢迎留言。

祝君好运!

相关文章:

  • 8 quick ways to clear up drive space in Windows 10
  • 【原创】Hacker学习发展流程图 V1.0
  • 设计模式(八)_门面模式
  • centos 中文乱码解决办法
  • Confluence 6 WebDAV 禁用严格路径检查
  • 并查集——向量偏移
  • 洛谷P3952 时间复杂度
  • XSS Filter Evasion Cheat Sheet 中文版
  • 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
  • awk编程
  • 24. 两两交换链表中的节点
  • 如何使Python完美升级到新版本
  • 子集
  • 源码编译安装LNMP环境及配置基于域名访问的多虚拟主机
  • Linux各目录及每个目录的详细介绍
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Android 控件背景颜色处理
  • C# 免费离线人脸识别 2.0 Demo
  • Cookie 在前端中的实践
  • k8s 面向应用开发者的基础命令
  • Mithril.js 入门介绍
  • node.js
  • Objective-C 中关联引用的概念
  • Promise面试题2实现异步串行执行
  • SQLServer之索引简介
  • Webpack 4 学习01(基础配置)
  • 工作中总结前端开发流程--vue项目
  • 收藏好这篇,别再只说“数据劫持”了
  • 微信开源mars源码分析1—上层samples分析
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 最简单的无缝轮播
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #传输# #传输数据判断#
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (3)llvm ir转换过程
  • (3)nginx 配置(nginx.conf)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net和jar包windows服务部署
  • @JoinTable会自动删除关联表的数据
  • [C# 网络编程系列]专题六:UDP编程
  • [DevEpxress]GridControl 显示Gif动画
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • [hdu 1711] Number Sequence [kmp]
  • [IOI2007 D1T1]Miners 矿工配餐
  • [iOS]-NSTimer与循环引用的理解
  • [LeetCode系列]3元素最近和问题的O(n^2)解法
  • [luoguP1666] 前缀单词(DP)