![]()
1 #include<stdio.h>
2
3 int is_hex(char ch); //判断是否是十六进制字符,是返回1
4 int hex_to_dec(char ch); //十六进制字符转换位十进制数
5 int main(void)
6 {
7 char a[80], b[80];
8
9 int i = 0;
10 while ((a[i] = getchar()) != '#')
11 {
12 i++;
13 }
14
15 int j = 0;
16 int count = 0; //十六进制字符的个数
17 int first_hex = -1; //第一个十六进制字符的下标
18 for (i = 0; a[i] != '#'; i++)
19 {
20 if (is_hex(a[i]))
21 {
22 count++;
23 if (count == 1)
24 {
25 first_hex = i;
26 }
27 b[j] = a[i];
28 j++;
29 }
30 }
31
32 int flag = 1; //等于-1时,表示负数
33 for (i = 0; i < first_hex; i++)
34 {
35 if (a[i] == '-')
36 {
37 flag = -1;
38 }
39 }
40
41 int num = 0;
42 for (i = 0; i < j; i++)
43 {
44 num = num * 16 + hex_to_dec(b[i]);
45 }
46
47 num = flag * num;
48 printf("%d", num);
49
50 return 0;
51 }
52 int is_hex(char ch)
53 {
54 int ret = 0;
55 if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f'))
56 {
57 ret = 1;
58 }
59
60 return ret;
61 }
62 int hex_to_dec(char ch)
63 {
64 int ret = 0;
65 if (ch >= '0' && ch <= '9')
66 {
67 ret = ch - '0';
68 }
69 else if (ch >= 'A' && ch <= 'F')
70 {
71 ret = 10 + ch - 'A';
72 }
73 else if (ch >= 'a' && ch <= 'f')
74 {
75 ret = 10 + ch - 'a';
76 }
77
78 return ret;
79 }