最易懂のC语言---字符串转换成十进制整数

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

 输入格式:
       输入在一行中给出一个以#结束的非空字符串。 输出格式:
       在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:
       +-P-xf4+-1!#

   输出样例:
       -3905

#include 
#include 

int main() {
    char p[100], a;
    int sign = 1;  // 符号标记,1为正,-1为负
    int i = 0;     // 数组索引
    int startednum = 0; // 是否开始读取数字

    // 读取输入
    while ((a = getchar()) != '#') {
        // 判断字符是否为有效的十六进制数字
        if ((a >= '0' && a <= '9') || (a >= 'a' && a <= 'f') || (a >= 'A' && a <= 'F')) {
            p[i] = a;
            i++;
            startednum = 1;
        } else if (a == '-' && !startednum) {
            sign = -1;
        }
    }
    p[i] = '\0';  // 这是一种约定,用于标识字符串的结束。 

    // 转换十六进制到十进制
    long long sum = 0;
    int k = 0;
    for (i = i - 1; i >= 0; i--, k++) {//因为-1才是有效的 
        int value;
        if (p[i] >= 'a' && p[i] <= 'f') {
            value = p[i] - 'a' + 10;
        } else if (p[i] >= 'A' && p[i] <= 'F') {
            value = p[i] - 'A' + 10;
        } else if (p[i] >= '0' && p[i] <= '9') {
            value = p[i] - '0';
        }
        sum += value * pow(16, k);
    }

    // 打印结果
    printf("%lld\n", sum * sign);
    return 0;
}

你可能感兴趣的:(c语言,开发语言)