华为机试:C语言 输入一个十六进制数,输出相应的十进制数
时间: 2024-12-18 21:19:05 浏览: 9
华为机试中的这个题目通常会考察C语言的基本输入输出操作以及对十六进制转换到十进制的理解。你可以使用`scanf`函数从用户那里获取一个字符串形式的十六进制数,然后通过循环和数学运算将其转换成十进制数。以下是简单的步骤:
1. 使用`scanf`读取输入的十六进制字符串,例如 `%s`格式表示读取字符串。
2. 初始化一个变量来存储十进制结果,如`int decimalNumber = 0`。
3. 遍历输入的每一位,检查它是否是十六进制数字(0-9,A-F或a-f)。如果不是,可以提示错误并结束程序;如果是,可以用ASCII码值减去'0'或'A'(对应于'10'和'10')来获取对应的十进制数值。
4. 将当前位的十六进制值乘以16的相应次方(最高位的权值是16^0,依次递减),然后加到`decimalNumber`上。
5. 最后,打印出`decimalNumber`作为十进制结果。
下面是一个简化的示例代码片段:
```c
#include <stdio.h>
#include <string.h>
int main() {
char hexStr[20]; // 假设最多16位十六进制数
printf("请输入一个十六进制数:");
scanf("%s", hexStr);
int decimalNumber = 0;
bool isHexDigit = false; // 判断字符是否为十六进制
for (int i = 0; hexStr[i] != '\0'; i++) {
if ((hexStr[i] >= '0' && hexStr[i] <= '9') || (hexStr[i] >= 'A' && hexStr[i] <= 'F') || (hexStr[i] >= 'a' && hexStr[i] <= 'f')) {
isHexDigit = true;
int digitValue = hexStr[i] - ('0' if hexStr[i] >= '0' else 'A');
decimalNumber *= 16;
decimalNumber += digitValue;
} else if (!isHexDigit) {
printf("输入不是有效的十六进制数。\n");
break;
}
}
printf("转换后的十进制数为:%d\n", decimalNumber);
return 0;
}
```
阅读全文