用c语言以字符形式逐个读入十六进制数的每一位。边读入边计算,将十六进制数转为10进制。假设数据不含小数。 输入 测试次数T 每组测试数据一行,为十六进制数。数据以#结束。 输出 对每组测试数据,输出转换后的十进制数字。
时间: 2023-06-04 07:07:12 浏览: 112
16进制数逐个读入时,需要用到scanf()函数,并通过循环逐个读入每一位。为了将16进制数转换成10进制数,则需要将每一位所对应的位权相加,再输出结果即可。具体代码实现如下:
#include <stdio.h>
int main() {
int t, i, j, len;
char hex[100];
scanf("%d", &t);
while(t--) {
scanf("%s", hex);
len = strlen(hex);
int dec = 0, power = 1;
for(i = len-1; i >= 0; i--) {
if(hex[i] >= '0' && hex[i] <= '9') {
dec += (hex[i] - '0') * power;
} else if(hex[i] >= 'A' && hex[i] <= 'F') {
dec += (hex[i] - 'A' + 10) * power;
} else if(hex[i] >= 'a' && hex[i] <= 'f') {
dec += (hex[i] - 'a' + 10) * power;
}
power *= 16;
}
printf("%d\n", dec);
}
return 0;
}