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

解决方案:

2.2 具体实现代码
package com.liuzhen.systemExe;
import java.util.Scanner;
public class Main {
//把16进制字符串转成2进制字符串
public String getSixteenToTwo(String A){
StringBuilder result = new StringBuilder("");
char[] arrayA = A.toCharArray();
for(int i = 0;i < arrayA.length;i++){
int temp;
if(arrayA[i] >= 'A' && arrayA[i] <= 'F'){
temp = arrayA[i] - 'A' + 10;
}
else
temp = arrayA[i] - '0';
result.append(getNumberToTwo(temp));
}
String result1 = result.toString();
return result1;
}
//把一个数字0~15转换成4位2进制
public String getNumberToTwo(int n){
StringBuilder result = new StringBuilder("");
for(int i = 0;i < 4;i++){
int temp = n%2;
result.append(temp);
n = n/2;
}
String temp1 = result.toString();
temp1 = getReverseString(temp1);
return temp1;
}
//把2进制字符串转成8进制字符串
public String getTwoToEight(String A){
if(A.length() % 3 == 1)
A = "00" + A;
if(A.length() % 3 == 2)
A = "0" + A;
char[] arrayA = A.toCharArray();
StringBuilder result = new StringBuilder("");
int count = 0;
int tempResult = 0;
for(int i = arrayA.length-1;i >= 0;i--){
int temp = arrayA[i] - '0';
tempResult += (int) (temp*Math.pow(2, count++));
if(count == 3){
count = 0;
result.append(tempResult);
tempResult = 0;
}
}
String result1 = result.toString();
result1 = getReverseString(result1);
result1 = getNonoZeroString(result1);
return result1;
}
//反转字符串
public String getReverseString(String A){
char[] arrayA = A.toCharArray();
int start = 0;
int end = arrayA.length-1;
while(start < end){
char temp = arrayA[start];
arrayA[start++] = arrayA[end];
arrayA[end--] = temp;
}
return String.valueOf(arrayA);
}
//去掉字符串前面的0
public String getNonoZeroString(String A){
char[] arrayA = A.toCharArray();
int count = 0;
for(int i = 0;i < arrayA.length;i++){
if(arrayA[i] == '0')
count++;
else
break;
}
char[] result = new char[arrayA.length-count];
for(int i = 0;i < arrayA.length-count;i++)
result[i] = arrayA[count+i];
return String.valueOf(result);
}
public static void main(String[] args){
Main test = new Main();
Scanner in = new Scanner(System.in);
//System.out.println("请输入一个正整数n:");
int n = in.nextInt();
in.nextLine();
//System.out.println("请输入n个十六进制数:");
String[] A = new String[n];
for(int i = 0;i < n;i++){
String temp = in.nextLine();
A[i] = temp;
}
in.close();
String[] result = new String[n];
for(int i = 0;i < n;i++){
result[i] = test.getTwoToEight(test.getSixteenToTwo(A[i]));
System.out.println(result[i]);
}
}
}
PS:提交了9次。。。

算法笔记_033:十六进制转八进制(Java)的更多相关文章
- 算法笔记_023:拓扑排序(Java)
目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...
- 算法笔记_228:信用卡号校验(Java)
目录 1 问题描述 2 解决方案 1 问题描述 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证 ...
- 算法笔记_138:稳定婚姻问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为稳定婚姻问题? 有一个男士的集合Y = {m1,m2,m3...,mn}和一个女士的计划X = {n1,n2,n3,...,nn}.每一个男士有 ...
- 算法笔记_137:二分图的最大匹配(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为二分图的最大匹配问题? 引用自百度百科: 首先得说明一下何为匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于 ...
- 算法笔记_132:最大流量问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为最大流量问题? 给定一个有向图,并为每一个顶点设定编号为0~n,现在求取从顶点0(PS:也可以称为源点)到顶点n(PS:也可以称为汇点)后,顶点 ...
- 算法笔记_040:二进制幂(Java)
目录 1 问题描述 2 解决方案 2.1 从左至右二进制幂 2.2 从右至左二进制幂 1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次 ...
- 算法笔记_014:合并排序(Java)
1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...
- 算法笔记_233:二阶魔方旋转(Java)
目录 1 问题描述 2 解决方案 1 问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示): 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下:x轴正向:绿x轴 ...
- 算法笔记_227:填写乘法算式(Java)
目录 1 问题描述 2 解决方案 1 问题描述 观察下面的算式: * * × * * = * * * 它表示:两个两位数字相乘,结果是3位数.其中的星号(*)代表任意的数字,可以相同,也可以不同, ...
随机推荐
- [CC-ANUGCD]Maximum number, GCD condition
[CC-ANUGCD]Maximum number, GCD condition 题目大意: 一个长度为\(n(n\le10^5)\)的数列\(A(A_i\le10^5)\),\(m(m\le10^5 ...
- <form> 标签 // HTML 表单 // from 表单转换成json 格式
<form> 标签 // HTML 表单 // from 表单转换成json 格式 form 表单,对开发人员来说是在熟悉不过的了,它是页面与web服务器交互时的重要信息来源 表 ...
- flex弹性盒子
注意事项 1.设为Flex布局之后,子元素的float,clear和vertical-align属性都讲失效 2.采用Flex布局的元素,称为Flex容器(Flex container),所有的子元素 ...
- ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法
应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法 NS ...
- 降压转换器 (Buck)
降压转换器 (Buck) 切换式降压转换器 (Buck) 能提供高效率.高度弹性.高压降比.高负载能力的降压转换. 多数降压转换器 (Buck) 包含上桥 MOSFET 和同步整流 MOSFET,根据 ...
- Constant-on-time buck-boost regulator converts a positive input to a negative output
Buck regulators find wide application as step-down regulators for converting large positive input vo ...
- sourceinsight 工程和源码不在同一个盘符下
建立sourceinsight的时候,si工程可以和项目源码不在同一个盘下面,即si工程在D盘下,而阅读的源码在E盘下. 方法步骤如下: 下看一下目录结构: Y:\work\Hi3521\Hi3521 ...
- Appium+python自动化55-appium desktop每次启动安装Unlock和Appium Setting问题
前言 部分真机可能会出现每次运行代码,启动app之前都会重复安装Unlock和Appium Setting这两个小工具,有的手机会自动安装,这个还好. 有的手机每次都会弹出一个安装确认框(如部分小米和 ...
- JPA入门样例(採用JPA的hibernate实现版本号)
(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了眼下Java持久化技术的长 ...
- fatal error: sys/cdefs.h: No such file or directory
sudo apt-get install g++-multilib