目录

1 问题描述

2 解决方案

2.1 注意问题

2.2 具体实现代码

 


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)的更多相关文章

  1. 算法笔记_023:拓扑排序(Java)

    目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...

  2. 算法笔记_228:信用卡号校验(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证 ...

  3. 算法笔记_138:稳定婚姻问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为稳定婚姻问题? 有一个男士的集合Y = {m1,m2,m3...,mn}和一个女士的计划X = {n1,n2,n3,...,nn}.每一个男士有 ...

  4. 算法笔记_137:二分图的最大匹配(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为二分图的最大匹配问题? 引用自百度百科: 首先得说明一下何为匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于 ...

  5. 算法笔记_132:最大流量问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为最大流量问题? 给定一个有向图,并为每一个顶点设定编号为0~n,现在求取从顶点0(PS:也可以称为源点)到顶点n(PS:也可以称为汇点)后,顶点 ...

  6. 算法笔记_040:二进制幂(Java)

    目录 1 问题描述 2 解决方案 2.1 从左至右二进制幂 2.2 从右至左二进制幂   1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次 ...

  7. 算法笔记_014:合并排序(Java)

    1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...

  8. 算法笔记_233:二阶魔方旋转(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示): 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下:x轴正向:绿x轴 ...

  9. 算法笔记_227:填写乘法算式(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 观察下面的算式: * * × * * = * * * 它表示:两个两位数字相乘,结果是3位数.其中的星号(*)代表任意的数字,可以相同,也可以不同, ...

随机推荐

  1. [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 ...

  2. <form> 标签 // HTML 表单 // from 表单转换成json 格式

    <form> 标签   // HTML 表单    // from 表单转换成json 格式 form 表单,对开发人员来说是在熟悉不过的了,它是页面与web服务器交互时的重要信息来源 表 ...

  3. flex弹性盒子

    注意事项 1.设为Flex布局之后,子元素的float,clear和vertical-align属性都讲失效 2.采用Flex布局的元素,称为Flex容器(Flex container),所有的子元素 ...

  4. ios开发中object-c中UTF-8 和 GBK 的 NSString 相互转化的方法

    应用都要遇到一个很头疼的问题:文字编码,汉字的 GBK 和 国际通用的 UTF-8 的互相转化稍一不慎, 就会满屏乱码.下面介绍 UTF-8 和 GBK 的 NSString 相互转化的方法   NS ...

  5. 降压转换器 (Buck)

    降压转换器 (Buck) 切换式降压转换器 (Buck) 能提供高效率.高度弹性.高压降比.高负载能力的降压转换. 多数降压转换器 (Buck) 包含上桥 MOSFET 和同步整流 MOSFET,根据 ...

  6. 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 ...

  7. sourceinsight 工程和源码不在同一个盘符下

    建立sourceinsight的时候,si工程可以和项目源码不在同一个盘下面,即si工程在D盘下,而阅读的源码在E盘下. 方法步骤如下: 下看一下目录结构: Y:\work\Hi3521\Hi3521 ...

  8. Appium+python自动化55-appium desktop每次启动安装Unlock和Appium Setting问题

    前言 部分真机可能会出现每次运行代码,启动app之前都会重复安装Unlock和Appium Setting这两个小工具,有的手机会自动安装,这个还好. 有的手机每次都会弹出一个安装确认框(如部分小米和 ...

  9. JPA入门样例(採用JPA的hibernate实现版本号)

    (1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了眼下Java持久化技术的长 ...

  10. fatal error: sys/cdefs.h: No such file or directory

    sudo apt-get install g++-multilib