目录

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. 【DP】BZOJ1592-[Usaco2008 Feb]Making the Grade 路面修整

    我活着从期中考试回来了!!!!!!!!!备考NOIP!!!!!!!!! [题目大意] 给出n个整数a1~an,修改一个数的代价为修改前后差的绝对值,问修改成不下降序列或者不上升序列的最小总代价. [思 ...

  2. bzoj 3669: [Noi2014]魔法森林 -- 动点spfa

    3669: [Noi2014]魔法森林 Time Limit: 30 Sec  Memory Limit: 512 MB 动点spfa Description 为了得到书法大家的真传,小E同学下定决心 ...

  3. Android -- 工程目录解释

    src:放置我们编写的源文件 gen:ADT帮助我们生成的,当项目使用资源时,会通过R.java引用资源文件(16进制,不可修改).每当资源发生变化都会重新编译R.java android x.x:我 ...

  4. April Fools Day Contest 2016 G. You're a Professional

    G. You're a Professional 题目连接: http://www.codeforces.com/contest/656/problem/G Description A simple ...

  5. Unity快捷键总结

    Shift+Alt+A  物体快速激活 Ctrl+P 开始 Ctrl+Shift+P 暂停 Ctrl+B  编译并运行 Z  Pivot/Center切换 X Local/Global切换

  6. java类中元素初始化顺序详解

    父类静态变量父类静态块子类静态变量子类静态块父类普通变量父类普通块父类构造方法子类普通变量子类普通块子类构造方法

  7. Delphi TFileStream 打开模式与共享模式

    { TFileStream create mode } fmCreate = $FF00; { Create a file with the given name. If a file with th ...

  8. Div+CSS展示物流跟踪轨迹信息

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. mysql世界国家省市地区的信息中英文

    项目的主要业务是在国外, 所以以前的省市数据不仅不全, 而且没有英文翻译,  幸好在网上找到一个符合要求的数据 感谢: https://github.com/moolighty/geo

  10. 一步一步学习Vim 全图解释

    转载:http://linux.chinaunix.net/techdoc/desktop/2009/01/03/1056322.shtml 一步一步学习Vim 全图解释 以下注释,根据图示和自己实践 ...