习题7-8 字符串转换成十进制整数 (15分)

    科技2022-07-11  97

    输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

    输入格式: 输入在一行中给出一个以#结束的非空字符串。

    输出格式: 在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

    输入样例:

    +-P-xf4+-1!#

    输出样例:

    -3905 #include <stdio.h> #include <string.h> #include <math.h> int main() { char A[100], B[100], x; int a = -1, b = -1, flag = 1; while ((x = getchar()) != '#') A[++a] = x; A[++a] = '\0'; for (int i = 0; i < a; ++i) { if (A[i] >= '0' && A[i] <= '9' || A[i] >= 'A' && A[i] < 'F' || A[i] >= 'a' && A[i] <= 'f') B[++b] = A[i]; if (A[i] == '-' && b == -1) flag = -1; } int sum = 0; for (int i = b; i >= 0; --i) if (B[i] >= '0' && B[i] <= '9') sum += (B[i] - '0') * pow(16, b - i); else if (B[i] >= 'A' && B[i] <= 'F') sum += (B[i] - 'A' + 10) * pow(16, b - i); else sum += (B[i] - 'a' + 10) * pow(16, b - i); printf("%d", flag * sum); return 0; }
    Processed: 0.014, SQL: 8