【问题描述】 将一个十六进制数转换成十进制数。 【输入形式】 输入一个大于等于0的十六进制数,最多4位,数字中如果有字母,用大写字母。 【输出形式】 一个整数。 【样例输入】 100F 【样例输出】 4111 #include <stdio.h> #define N 4 int HexToDec(char *p); int main() { int x; char a[N+1]; scanf("%s",a);续写
时间: 2024-03-23 13:39:13 浏览: 15
续写:
```c
int HexToDec(char *p) {
int len = 0;
while (p[len] != '\0') {
len++;
}
int base = 1; // 用于表示当前位所代表的16进制数的值,初始值为1,即16^0
int result = 0; // 用于保存最终的10进制数值
for (int i = len - 1; i >= 0; i--) {
int cur = 0; // 用于表示当前位所代表的16进制数值
if (p[i] >= '0' && p[i] <= '9') {
cur = p[i] - '0';
} else {
cur = p[i] - 'A' + 10; // A~F 对应的10进制数值为 10~15
}
result += cur * base; // 将当前位的16进制数值乘上当前位所代表的16进制数的值,然后加到结果上
base *= 16; // 将当前位所代表的16进制数的值乘上16,以便于计算下一位的数值
}
return result;
}
int main() {
char a[N + 1];
scanf("%s", a);
int result = HexToDec(a);
printf("%d\n", result);
return 0;
}
```
这个代码实现的过程是:首先计算输入十六进制数的长度,然后从高位到低位遍历每一位数值,将当前位的16进制数值乘上当前位所代表的16进制数的值,然后加到结果上;同时,将当前位所代表的16进制数的值乘上16,以便于计算下一位的数值。最后返回计算结果。
输入样例:100F
输出样例:4111