如何用c语言写一个以字符形式逐个读入十六进制数的每一位,边读入边计算,将十六进制数转为10进制,输入测试次数T和每组测试数据,每组测试数据各占一行,输入的数据为十六进制数且数据以#结束,输出转换后的十进制数字,每组数据要各占一行。
时间: 2023-06-07 13:08:25 浏览: 92
字符串形式输入。
可以使用scanf函数按照%s格式读入字符串类型的十六进制数,然后使用循环逐个读取字符串中的字符,使用isdigit函数判断是否为数字字符,如果是,根据字符和其在字符串中的位置计算出对应的十六进制数值,然后按照位权法将十六进制数转化为十进制数。最后将转化后的十进制数输出即可。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <ctype.h>
int hexToDec(char* hex);
int main() {
int T;
scanf("%d", &T);
while (T--) {
char hex[100];
scanf("%s", hex);
printf("%d\n", hexToDec(hex));
}
return 0;
}
int hexToDec(char* hex) {
int dec = 0, len = strlen(hex);
for (int i = 0; i < len; i++) {
if (isdigit(hex[i])) {
dec += (hex[i] - '0') * pow(16, len - i - 1);
}
else if (isalpha(hex[i])) {
dec += (toupper(hex[i]) - 'A' + 10) * pow(16, len - i - 1);
}
}
return dec;
}
```
阅读全文