-

------------------------------------------------------------------------------------------------------------------

(基础练习第二题就难住了 QAQ)

这道题的限制比较多,因为最开始说的是十六进制数的长度不超过100000,

而long类型才十九位,肯定不能用系统自带的进制转换方法,需要自己写

------------------------------------------------------------------------------------------------------------------

算法

 import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] sts = new String[n];
for(int i=0;i<n;i++){
sts[i] = sc.next();
}
sc.close();
for(int i=0;i<n;i++){
String strBinary = toBinary(sts[i]);
int len_strBin = strBinary.length();
if(len_strBin%3==1) strBinary = "00"+strBinary;
if(len_strBin%3==2) strBinary = "0"+strBinary;
String strOctal = toOctal(strBinary);
System.out.println(strOctal);
}
}
private static String toOctal(String strBinary) {
int len = strBinary.length();
int k;
StringBuffer stb = new StringBuffer();
if(strBinary.substring(0, 3).equals("000"))
k=3;
else
k=0;
for(int i=k;i<len-2;i+=3){
switch (strBinary.substring(i, i+3)) {
case "000":stb.append("0");break;
case "001":stb.append("1");break;
case "010":stb.append("2");break;
case "011":stb.append("3");break;
case "100":stb.append("4");break;
case "101":stb.append("5");break;
case "110":stb.append("6");break;
case "111":stb.append("7");break;
default:break;
}
}
return stb.toString();
}
private static String toBinary(String strHex) {
int len_str = strHex.length();
StringBuffer stb = new StringBuffer();
for(int i=0;i<len_str;i++){
switch (strHex.charAt(i)) {
case '0':stb.append("0000");break;
case '1':stb.append("0001");break;
case '2':stb.append("0010");break;
case '3':stb.append("0011");break;
case '4':stb.append("0100");break;
case '5':stb.append("0101");break;
case '6':stb.append("0110");break;
case '7':stb.append("0111");break;
case '8':stb.append("1000");break;
case '9':stb.append("1001");break;
case 'A':stb.append("1010");break;
case 'B':stb.append("1011");break;
case 'C':stb.append("1100");break;
case 'D':stb.append("1101");break;
case 'E':stb.append("1110");break;
case 'F':stb.append("1111");break;
default:break;
}
}
return stb.toString();
}
}

要注意小细节,十六进制每一位 对应4位二进制数,八进制对应3位二进制数,十六进制生成二进制后,

在转化八进制前,要查看长度是不是三的倍数,如果不是,则用0补齐.之后在转化八进制开始要判断

开头的三个是不是"000"的形式,如果是则不算在八进制数里.

             int len_strBin = strBinary.length();
if(len_strBin%3==1) strBinary = "00"+strBinary;
if(len_strBin%3==2) strBinary = "0"+strBinary;
String strOctal = toOctal(strBinary);

做好这类题目要学会去发现什么是变的 什么是不变的 不要试图全部用算法去实现,这样只会事倍功半.

StringBuffer适合定义一个经常变的字符串变量,使用StringBuilder 效率更高效

熟练使用charAt,append,substring方法.

蓝桥网试题 java 基础练习 十六进制转八进制的更多相关文章

  1. 蓝桥网试题 java 基础练习 十六进制转十进制

    ---------------------------------------------------------------------------------------- 貌似用int类型不会超 ...

  2. 蓝桥网试题 java 基础练习 十进制转十六进制

    ---------------------------------------------------------------------------------------------------- ...

  3. 蓝桥网试题 java 基础练习 矩形面积交

    ------------------------------------------------------------------------------------------- 思路见锦囊2 - ...

  4. 蓝桥网试题 java 基础练习 矩阵乘法

    ------------------------------------------------------------ 第一次感觉到好好学习的重要性QAQ 在做这道题之前请先学会 :矩阵乘法(百度百 ...

  5. 蓝桥网试题 java 基础练习 分解质因数

    -------------------------------------------------------------------------- 递归更多的用在多分支情况中 本题用循环就可以了 用 ...

  6. 蓝桥网试题 java 基础练习 字符串对比

    -------------------------------------------------------------------------------- java有很多可以拿来用的方法为什么不 ...

  7. 蓝桥网试题 java 基础练习 时间转换

    --------------------------------------- --------------------------------------- import java.util.*; ...

  8. 蓝桥网试题 java 基础练习 特殊的数字

    -------------------------------------------------------- 笑脸 :-) ------------------------------------ ...

  9. 蓝桥网试题 java 基础练习 杨辉三角形

    ----------------------------------------------------------- ---------------------------------------- ...

随机推荐

  1. 编码器芯片MLX90363的使用

    文档资料 MLX90363 Datasheet MLX90363 Application Note 使用 对于编码器来说,Rotary Application模式 SPI驱动中,CS必须在8个字节都发 ...

  2. WebRequest调用

    WebRequest支持不同的浏览器对象,可以在底层使用不同的XMLHttpRquest方式调用Web服务. Time.aspx <%@ Page Language="C#" ...

  3. (中等) HDU 4069 Squiggly Sudoku , DLX+精确覆盖。

    Description Today we play a squiggly sudoku, The objective is to fill a 9*9 grid with digits so that ...

  4. Objective C HMAC-MD5

    - (NSString*) HMACWithSecret:(NSString*) secret andString:(NSString *)str { unsigned long encode = C ...

  5. java类固定值代替基表写法

    package cn.com.mcd.enumeration; public enum AuditStatusEnum { NOTAUDIT("0", "未审核" ...

  6. FAB、TextInputLayout及Snackbar笔记

    FloatingActionButton 由于FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性. 控制F ...

  7. DataTable distinct 去重复

    有时我们需要从DataTable中抽取Distinct数据,以前总是以对DataTable进行foreach之类纯手工方式获取. 近来发现DataView可以帮我们直接获取Distinct数据,汗一个 ...

  8. 背景图片等比缩放的写法background-size简写法

    1.背景图片或图标也可像img一样给其宽高就能指定其缩放大小了. 比如一个实际宽高36*28的图标,要缩小一半引用进来的写法就是: background:rgba(0, 0, 0, 0) url(&q ...

  9. 全局文件 pch

    在 bulding setting 里面 搜 prefix header 然后添加自己的pch 路径, 类似 $(SRCROOT)/... 还要把 precompile prefix header 设 ...

  10. js架构设计模式——MVC,MVP 和 MVVM 的图示及简单明了的区别说明

    MVC,MVP 和 MVVM 的图示 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理 ...