【C/C++交流】#include <stdio.h>#include <string.h>double trans(char a[]) { int i=0, j, m; double n, s,x; s=0.0; while( a[i]!='.' && a[i]) i++; // 将十六进制字符串转换为十进制数 for (j = i - 1; j >= 0; j--) { if (a[j] >= 'A' && a[j] <= 'F') { n = a[j] - 'A' + 10; } else if (a[j] >= '0' && a[j] <= '9') { n = a[j] - '0'; } s += n * pow(16, i - j - 1); } // 将小数部分转换为十进制数 for (j = i + 1; a[j]; j++) { if (a[j] >= 'A' && a[j] <= 'F') { n = a[j] - 'A' + 10; } else if (a[j] >= '0' && a[j] <= '9') { n = a[j] - '0'; } s += n / pow(16, j - i); } return s;}int main() { int i=-1; char a[50]; printf("请输入一个十六进制数:"); gets(a); // 转换字母为大写 while(a[++i]){ if (a[i]>='a') a[i] -= 32; // 小写字母字符转换为大写 } printf("十六进制数%s转换为十进制数为:%f\n",a,trans(a)); return 0;}
在这个代码中,我们使用了以下算法步骤将十六进制数转换为十进制数:
1. 首先,我们通过遍历输入字符串,找到小数点的位置。
2. 然后,我们从小数点前面开始,按权重计算每个十六进制字符所代表的十进制值,并累加到变量s中。
3. 接下来,我们从小数点后面开始,按权重计算每个十六进制字符所代表的十进制值,并累加到变量s中。
最后,我们将结果返回并在main函数中输出。请注意,为了能够使用pow函数进行指数运算,我们需要在代码开头引入<math.h>头文件。
希望这个回答对你有帮助!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!
|