#include #include int main() { char input[1000]; // 假设输入的字符串长度不超过1000 char hex_str[1000]; // 存储提取出的十六进制字符 int index = 0; // 记录当前处理的字符位置 int negative = 0; // 标记是否存在负号 // 读取输入直到遇到 # while (1) { char ch = getchar(); if (ch == '#') { break; } input[index++] = ch; } input[index] = '\0'; // 在输入末尾加上字符串结束符 // 判断是否有负号 if (input[0] == '-') { negative = 1; // 存在负号 index = 1; // 从下一个字符开始处理 } else { index = 0; // 没有负号,从第一个字符开始处理 } int hex_index = 0; // 记录当前提取的十六进制字符位置 // 遍历输入字符串,提取十六进制字符 while (input[index] != '\0') { char ch = toupper(input[index]); // 将字符转换为大写以便统一处理 if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) { hex_str[hex_index++] = ch; // 是十六进制字符,加入到hex_str中 } index++; } hex_str[hex_index] = '\0'; // 在提取的十六进制字符末尾加上字符串结束符 // 使用sscanf将十六进制字符串转换为长整型 long decimal_value; sscanf(hex_str, "%lx", &decimal_value); // %lx格式将十六进制字符串转换为长整型 // 如果存在负号,转换后的数值取负 if (negative) { decimal_value = -decimal_value; } // 输出转换后的十进制数值 printf("%ld\n", decimal_value); return 0; }