您的位置:首页 > 编程语言 > Java开发

(Java)【基础练习】10-12:十进制转十六进制 + 十六进制转十进制 + 十六进制转八进制

2019-03-31 17:47 274 查看

10:十进制转十六进制

问题描述:

  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0 4000 至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。

输入格式:输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

输出格式:输出这个整数的16进制表示

样例输入:

        30

样例输出

        1E

----------------------------------------------------

思路:

       十进制转换为k进制可采用除k取余法。

       需要注意的是:这里越早得到的数字其数位越低,因此应对得到的字符串进行倒置处理。

代码示例:

[code]import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n = in.nextLong();
in.close();

// 用数组保存十六进制下0-15相应的字符
char[] a = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

StringBuilder s = new StringBuilder();

if (n == 0)
s.append("0");

while (n != 0) {
s.append(a[(int)n%16]);
n /= 16;
}
s.reverse();
System.out.println(s);
}
}

 

11:十六进制转十进制

问题描述:

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入:

        FFFF

样例输出:

        65535

--------------------------------------------------------------------------------------------------

思路:

        k进制转换为十进制,即求 当前位数字 * 进制基数 * 数位权重 之和。

       例如:1E = E(14)*16^0 + 1*16^1 = 14 + 16 = 30

代码示例:

[code]import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder s = new StringBuilder(in.nextLine());
in.close();

long rel = 0;
s.reverse();
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
int temp = c-'0';

// 用来判断这一位的字符是0-9还是A-F('A'-'0'=17)
if (temp < 16) {
rel += temp * Math.pow(16, i);
}
else {
rel += (temp-7) * Math.pow(16, i);
}
}

System.out.println(rel);
}
}

 

12:十六进制转八进制

问题描述:给定n个十六进制正整数,输出它们对应的八进制数。

输入格式:
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式:输出n行,每行为输入对应的八进制正整数。

   【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

---------------------------------------------------------------------------------

思路:
  先将十六进制数转换成二制数,再由二进制数转换成八进制。

       需要注意的是:每1位十六进制数可以转换为4位二进制数,而3位二进制数可以转换为1位八进制数。

代码示例:

[code]import java.util.*;

public class Main{
// 将十六进制转换为二进制
private static StringBuilder toBinary(String strHex) {
StringBuilder strBin = new StringBuilder();

for (int i=0; i<strHex.length(); i++){
char c = strHex.charAt(i);
switch (c) {
case '0':
strBin.append("0000");
break;
case '1':
strBin.append("0001");
break;
case '2':
strBin.append("0010");
break;
case '3':
strBin.append("0011");
break;
case '4':
strBin.append("0100");
break;
case '5':
strBin.append("0101");
break;
case '6':
strBin.append("0110");
break;
case '7':
strBin.append("0111");
break;
case '8':
strBin.append("1000");
break;
case '9':
strBin.append("1001");
break;
case 'A':
strBin.append("1010");
break;
case 'B':
strBin.append("1011");
break;
case 'C':
strBin.append("1100");
break;
case 'D':
strBin.append("1101");
break;
case 'E':
strBin.append("1110");
break;
case 'F':
strBin.append("1111");
break;
default:
break;
}
}
return strBin;
}

// 将二进制转换为八进制
private static StringBuilder toOctal(StringBuilder strBin) {
StringBuilder strOct = new StringBuilder();

for (int i=0; i<strBin.length(); i+=3) {
String temp = strBin.substring(i, i+3);

switch (temp) {
case "000":
strOct.append("0");
break;
case "001":
strOct.append("1");
break;
case "010":
strOct.append("2");
break;
case "011":
strOct.append("3");
break;
case "100":
strOct.append("4");
break;
case "101":
strOct.append("5");
break;
case "110":
strOct.append("6");
break;
case "111":
strOct.append("7");
break;
default:
break;
}
}
return strOct;
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();

String[] strHex = new String
;
for (int i=0; i<n; i++) {
strHex[i] = in.next();
}
in.close();

for (int i=0;i<n;i++) {
StringBuilder strBin = toBinary(strHex[i]);
int l = strBin.length();

// 不足三位时用零补足
if (l%3 == 1) {
strBin.insert(0, "00");
}
if (l%3 == 2) {
strBin.insert(0, "0");
}

StringBuilder strOct = toOctal(strBin);
// 去掉前导位的0
if (strOct.charAt(0) == '0') {

strOct.deleteCharAt(0);
}
System.out.println(strOct);
}
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: