目录

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. 理解面向消息中间件及JMS 以及 ActiveMQ例子

    为了帮助你理解ActiveMQ的意义,了解企业消息传送背景和历史是很重要的.讨论完企业消息传送,你将可以通过一个小例子了解JMS及其使用.这章的目的是简要回顾企业消息传送及JMS规范.如果你已经熟悉这 ...

  2. AHOI2018训练日程(3.10~4.12)

    (总计:共90题) 3.10~3.16:17题 3.17~3.23:6题 3.24~3.30:17题 3.31~4.6:21题 4.7~4.12:29题 ZJOI&&FJOI(6题) ...

  3. [GCJ2017R2]Fresh Chocolate

    题目大意: 有n个团和很多盒糖,每个团中人数不一定相同,每盒糖中都有p颗糖. 现在要给每个团发糖,要求每个人都要发到糖,只有一盒糖发完后才能发下一盒糖. 发糖的顺序可以任意安排,问经过合理安排后,最多 ...

  4. [SimpleOJ233]a xor b

    题目大意: 给你一个数列,求所有区间最大值和次大只异或的最大值. 思路: 很容易想到一个O(n^2)的暴力. O(n)的单调栈做法似乎也很好想,不过考场上没想出来. 对于数列上的某一个数,我们维护在它 ...

  5. [bzoj1017][JSOI2008]魔兽地图 DotR (Tree DP)【有待优化】

    Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Anc ...

  6. bzoj 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 -- 最大生成树

    3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 Time Limit: 1 Sec  Memory Limit: 128 MB Description     奶牛贝 ...

  7. 14. Cantor表

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数 ...

  8. 读书笔记_Effective_C++_条款三十:了解inline的里里外外

    学过基本程序课的同学都知道,inline是内联的关键字,它可以建议编译器将函数的每一个调用都用函数本体替换.这是一种以空间换时间的做法.把每一次调用都用本体替换,无疑会使代码膨胀,但可以节省函数调用的 ...

  9. Shell基础学习(七) 输入输出重定向

    命令 说明 command>file 将输出重定向到file command<file 将输入重定向到file command >> file 将输出追加到file n > ...

  10. Cwrsync_rsync windows_windows下的rsync

    1.官网已不允许免费下载cwrsync的server了,我就先给出下载地址: http://files.cnblogs.com/files/assassin1994/cwRsync_4.0.5_ser ...