|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【程序设计】
------------------------------------------------------------------------
题目:已知a是一个十六进制数的字符串,现将其转换为十进制数并输出。
结果例如:
十六进制数:B5.3D
转换为十进制数:181.238281
-----------------------------------------------------------------------
在/**********Program**********/
/********** End **********/补充完整程序
---------------------------------------------------------------------*/
#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++;
/**********Program**********/
/********** End **********/
return s;
}
int main()
{
int i=-1;
char a[10];
gets(a);
while(a[++i]){
if (a[i]>='a') a[i] -= 32; // 小写字母字符转换为大写
}
printf("十六进制数%s转换为十进制数为:%f\n",a,trans(a));
return 0;
}
【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>头文件。
希望这个回答对你有帮助!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要! 
|
|