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+

}