实验7-3-6 字符串转换成十进制整数(15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <stdio.h>
int main() { int i, j, flag; char hexad[100], str[100]; long number; i = 0; while ((str[i] = getchar()) != '#') i++; str[i] = '\0'; flag = 0; for (i = 0; str[i] != '\0'; i++) { if (str[i] == '-') { flag = 1; break; } else if ((str[i] >= '0' && str[i] <= '9')) break; } if (flag) { hexad[0] = '-'; j = 1; } else j = 0; for (i = 0; str[i] != '\0'; i++) { if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'a' && str[i] <= 'f') || (str[i] >= 'A' && str[i] <= 'F')) { hexad[j] = str[i]; j++; } } hexad[j] = '\0'; number = 0; for (i = 0; hexad[i] != '\0'; i++) { if (hexad[i] >= '0' && hexad[i] <= '9') number = number*16 + hexad[i]-'0'; else if (hexad[i] >= 'A' && hexad[i] <= 'F') number = number*16+hexad[i]-'A'+10; else if (hexad[i] >= 'a' && hexad[i] <= 'f') number = number*16 + hexad[i]-'a'+10; } if (hexad[0] == '-' && number < 0xabcdef) number = -1*number; printf("%ld\n", number); return 0; }
|