基础练习 十六进制转八进制
来源:互联网 发布:x教授 知乎 编辑:程序博客网 时间:2024/06/03 21:43
-
------------------------------------------------------------------------------------------------------------------
(基础练习第二题就难住了 QAQ)
这道题的限制比较多,因为最开始说的是十六进制数的长度不超过100000,
而long类型才十九位,肯定不能用系统自带的进制转换方法,需要自己写
------------------------------------------------------------------------------------------------------------------
要注意小细节,十六进制每一位 对应4位二进制数,八进制对应3位二进制数,十六进制生成二进制后,
在转化八进制前,要查看长度是不是三的倍数,如果不是,则用0补齐.之后在转化八进制开始要判断
开头的三个是不是"000"的形式,如果是则不算在八进制数里.
import java.util.Scanner;/* * 将十六进制转化为八进制 * 思路,先将十六进制转化为二进制,然后从为二进制转化为八进制 */public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();while (n-- != 0) {String s1 = scan.next().trim();// 将十六进制转化为二进制StringBuilder s2 = changeToEr(s1);// 将二进制转化为八进制StringBuilder s3 = changToOc(s2);System.out.println(s3);}}private static StringBuilder changToOc(StringBuilder s2) {int len = s2.length();StringBuilder s3 = null;if (len % 3 == 0) {s3 = zhixing(s2);} else if (len % 3 == 1) {s2.insert(0, "00");s3 = zhixing(s2);} else {s2.insert(0, "0");s3 = zhixing(s2);}return s3;}private static StringBuilder zhixing(StringBuilder s2) {StringBuilder s3 = new StringBuilder();for (int i = 0; i < s2.length(); i += 3) {String s4 = (String) s2.subSequence(i, i + 3);//System.out.println(s4);if (i == 0 && s4.equals("000")) {} else {switch (s4) {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;}}}return s3;}private static StringBuilder changeToEr(String s1) {StringBuilder s2 = new StringBuilder();int len = s1.length();char[] ch = s1.toCharArray();for (int i = 0; i < len; i++) {char c = ch[i];switch (c) {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;}}return s2;}}
阅读全文
0 0
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制
- 系统安装记录
- 【Linux入门学习之】vi/vim编辑器必知必会
- 题目“计算A+B,输入第一行为一个整数n(1≤n≤10)代表测试的组数。 下面有n组测试数据,每组1行,为2个整数,为A,B。”——代码调试有误
- 容器互联与端口映射
- [蓝桥杯]基础练习 字母图形
- 基础练习 十六进制转八进制
- 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序
- 从源码看Android消息机制
- 反思
- Linux基本操作指令
- 创意
- prototype.js 让你更深入的了解javascript的面向对象特性
- 欢迎使用CSDN-markdown编辑器
- NSString 类的内存管理问题