(Java)【基础练习】10-12:十进制转十六进制 + 十六进制转十进制 + 十六进制转八进制
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); } } }
- 【JAVA】 基础练习 BASIC-12 十六进制转八进制
- 蓝桥杯基础练习之十六进制转十进制、十六进制转八进制、数列排序、时间转换、字符串对比(c/c++/java)
- 算法-蓝桥杯-基础练习 十六进制转八进制(JAVA)
- 蓝桥杯-基础练习之十进制转十六进制——BASIC-10
- 蓝桥杯OJ刷题日记——10-基础练习 十进制转十六进制
- 蓝桥杯 基础练习 BASIC-10 十进制转十六进制 循环 整除 求余 判断
- 蓝桥杯 基础练习 10. 十进制转十六进制 11.十六进制转十进制
- 蓝桥杯-基础练习之十六进制转八进制——BASIC-12
- 蓝桥杯OJ刷题日记——12-基础练习 十六进制转八进制
- 基础练习 BASIC-12 十六进制转八进制
- 蓝桥杯 基础练习 BASIC-12 十六进制转八进制 进制转换 字符 循环
- 蓝桥杯 12 基础练习 十六进制转八进制
- 蓝桥杯 BASIC-12 基础练习 十六进制转八进制
- 基础练习 十六进制转八进制 (java)
- 蓝桥杯 基础练习之特殊的数字 、回文数、特殊回文数、十进制转十六进制 、十六进制转十进制
- 基础练习 BASIC-10 十进制转十六进制
- java基础练习 十六进制转八进制
- 蓝桥杯 BASIC-10 基础练习 十进制转十六进制
- 蓝桥杯 BASIC-10 基础练习 十进制转十六进制
- Java-蓝桥杯- 基础练习 十进制转十六进制