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 }