huawei10 · h2pl/JavaTutorial@2122a02
1+package com.zcr.g_huawei;
2+3+import java.util.Scanner;
4+5+6+/**
7+ * 进制转换
8+ * 题目描述
9+ * 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
10+ *
11+ * 输入描述:
12+ * 输入一个十六进制的数值字符串。
13+ *
14+ * 输出描述:
15+ * 输出该数值的十进制字符串。
16+ *
17+ * 示例1
18+ * 输入
19+ * 复制
20+ * 0xA
21+ * 输出
22+ * 复制
23+ * 10
24+ *
25+ *
26+ *
27+ * 知识点:
28+ * 1.16进制:16进制即逢16进1,每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个大小不同的数。
29+ * 16进制转换即16进制与其他不同进制之间的换算转换,常见如2进制、8进制、10进制等进制。
30+ * 16进制转换为10进制:
31+ * 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
32+ * 所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
33+ * 例:2AF5换算成10进制:
34+ * 用竖式计算:
35+ * 第0位: 5 * 16^0 = 5
36+ * 第1位: F * 16^1 = 240
37+ * 第2位: A * 16^2= 2560
38+ * 第3位: 2 * 16^3 = 8192
39+ * -------------------------------------
40+ * 10997
41+ * 直接计算就是:
42+ * 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
43+ *
44+ * 16进制到二进制
45+ * 由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换,即得所求:
46+ * 例:2AF5换算成2进制:
47+ * 第0位: (5)16 = (0101) 2
48+ * 第1位: (F)16 = (1111) 2
49+ * 第2位: (A) 16 = (1010) 2
50+ * 第3位: (2) 16 = (0010) 2 -------------------------------------
51+ * 得:(2AF5)16=(0010.1010.1111.0101)2
52+ *
53+ *
54+ * 2转16
55+ * 16进制就有16个数,0~15,用二进制表示15的方法就是1111,从而可以推断出,16进制用2进制可以表现成0000~1111,顾名思义,也就是每四个为一位。举例:
56+ * 00111101可以这样分:
57+ * 0011|1101(最高位不够可用零代替),对照着二进制的表格,1024 512 256 128 64 32 16 8 4 2 1 (一般例举这么多就够了,如果有小数的话就继续往右边列举,如0.5 0.25 0.125 0.0625……)
58+ * 1024 512 256 128 64 32 16 8 4 2 1
59+ * 0 0 1 1| 1 1 0 1
60+ * 左半边=2+1=3 右半边=8+4+1=13=D
61+ * 结果,00111101就可以换算成16进制的3D。
62+ *
63+ * 2.字符也代表响应的ASII码
64+ * 字符-'a'往往是一个数字
65+ *
66+ */
67+public class hexToDecima5 {
68+69+public static void main(String[] args) {
70+Scanner scanner = new Scanner(System.in);
71+while (scanner.hasNext()) {
72+String str = scanner.next();
73+System.out.println(hexToDecima(str.substring(2)));
74+ }
75+ }
76+77+public static int hexToDecima(String str) {
78+int result = 0;
79+int count = 0;
80+int temp = 0;
81+char ch;
82+83+while (count < str.length()) {
84+ch = str.charAt(str.length() - 1 - count);
85+if (ch >= '0' && ch <= '9') {
86+temp = ch - '0';
87+ } else if (ch >= 'A' && ch <= 'Z') {
88+temp = ch - 'A' + 10;
89+ } else if (ch >= 'a' && ch < 'z') {
90+temp = ch = 'a' + 10;
91+ } else {
92+break;
93+ }
94+result += temp * Math.pow(16, count);
95+count++;
96+ }
97+return result;
98+ }
99+}