题目描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
示例1
输入
0xA
输出
10
题解
1. 数学上对进制转换
0xabcd = a16^3 + b16^2 +c161 +d160
如果看成一个数组来存储,则在数组里对顺序与幂的大小成相反关系。
index = len-1时,幂=0;
index = 2时,幂 = len -3
2. 求字符串长度len.
3. 考虑字符可能的三种情况,分别计算出对应的十进制数digit
这里通过字符串想减,将十六进制位转换位十进制。
4.计算对应的sum = pow(16,j)*digit
5.输出结果
6. c语言实现
#include <stdio.h> #include <math.h> int main() { //1. 输入处理 char num[100]; while (scanf("%s",num) != EOF) { //2. 进制转换 int sum=0; int len = 0; while (num[len] != '\0') { len++; } for (int i = len-1,j=0 ; i>=2 && j<len-2; i--,j++) { //不包含开头0x int digit=0; if (num[i] >='A' && num[i] <='F') { digit = num[i] - 'A' +10; } else if (num[i] >='a' && num[i] <='f') { digit = num[i] -'a' +10; } else { digit = num[i]-'0'; } sum += pow(16,j)*digit; } //3. 输出处理 printf("%d\n",sum); } return 0; }