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


-
------------------------------------------------------------------------------------------------------------------
(基础练习第二题就难住了 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 基础练习 十六进制转八进制的更多相关文章
- 蓝桥网试题 java 基础练习 十六进制转十进制
---------------------------------------------------------------------------------------- 貌似用int类型不会超 ...
- 蓝桥网试题 java 基础练习 十进制转十六进制
---------------------------------------------------------------------------------------------------- ...
- 蓝桥网试题 java 基础练习 矩形面积交
------------------------------------------------------------------------------------------- 思路见锦囊2 - ...
- 蓝桥网试题 java 基础练习 矩阵乘法
------------------------------------------------------------ 第一次感觉到好好学习的重要性QAQ 在做这道题之前请先学会 :矩阵乘法(百度百 ...
- 蓝桥网试题 java 基础练习 分解质因数
-------------------------------------------------------------------------- 递归更多的用在多分支情况中 本题用循环就可以了 用 ...
- 蓝桥网试题 java 基础练习 字符串对比
-------------------------------------------------------------------------------- java有很多可以拿来用的方法为什么不 ...
- 蓝桥网试题 java 基础练习 时间转换
--------------------------------------- --------------------------------------- import java.util.*; ...
- 蓝桥网试题 java 基础练习 特殊的数字
-------------------------------------------------------- 笑脸 :-) ------------------------------------ ...
- 蓝桥网试题 java 基础练习 杨辉三角形
----------------------------------------------------------- ---------------------------------------- ...
随机推荐
- SQL SERVER 2008 Hierarchyid数据类型
以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条纪录间的父子关系.但这种方式只能标示其相对位置.解决这类问题在SqlServer2005出现之前通常是采用游标来操作, ...
- spring加载过程中jar包加载不了,解决方法
当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们ad ...
- openstack controller ha测试环境搭建记录(十二)——配置neutron(计算节点)
在计算节点配置内核参数:vi /etc/sysctl.confnet.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0 在计算节点使 ...
- KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释(转)
源:KEIL MDK 查看代码量.RAM使用情况--RO-data.RW-data.ZI-data的解释 KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-da ...
- GoEasy消息推送
1. 从GoEasy获取appkey appkey是验证用户的有效性的唯一标识. 注册账号. GoEasy官网:https://goeasy.io 用注册好的账号登录到GoEasy的后台管理系统,创建 ...
- 单片机联网,UIP实现tcp/udp协议
UIP是单片机界联网的一个很好地选择,移植这个库有点复杂,首先是第一步,网卡驱动要写好,使用的网卡芯片为ENC28J60,驱动可以再工程包里面找到 //配置网卡硬件,并设置MAC地址 //返回值:0, ...
- eclipse注释模板设置(未整理)
Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit ...
- c++读取REG_MULTI_SZ类型注册表
First: run RegQueryValueEx to get type and necessary memory size: Single byte code: DWORD type, size ...
- RDA5820收音机芯片驱动
RDA5820 是北京锐迪科推出的一款集成度非常高的立体声 FM收发芯片.该芯片具有以下 特点: FM 发射和接收一体 支持 65Mhz~115Mhz的全球 FM接收频段,收发天线共用. ...
- UVA 11542 Square ——线性基
[题目分析] 每个数没有超过500的因子.很容易想到把每一个数表示成一个二进制的数. (0代表该质数的次数为偶数,1代表是奇数) 然后问题转化成了选取一些二进制数,使他们的异或和为0. 高斯消元,2^ ...