C语言实现16进制转10进制(包含小数部分)

简介: C语言实现16进制转10进制(包含小数部分)

C语言实现16进制转10进制(包含小数部分)

想法:

通过按权展开的方法:

(BC)H=11x16^1 + 12x16^0

步骤:

1.用字符数组来放16进制

2.将数组元素逆序排放

3.将数组元素的下标当做16进制的权

4.将字符转换成数字 * 16的权

代码实现

floatfun(intn)   //递归函数实现16的N次方{
if(n==0)
return1;
elsereturn16*fun(n-1);
}
voidmain()
{
chars[20],*s1=s,*s2=s,*s3=s,t;
intnum;
floatsum=0.0;
gets(s);
while(*s1) s1++;
for(num=s1---s;s2<s1;s2++,s1--)      //将数组元素逆序排放t=*s2,*s2=*s1,*s1=t;//数组元素的下标当做16进制的权while(*s3)
   {
if(*s3=='.')
break;
s3++;
   }
for(s1=s;s1<s+num;s1++)
     {
if(s1-s3<0&&*s3=='.')                  //求小数部分,*s3='.',说明有小数        {
if(*s1>=48&&*s1<=57)              //根据小数点的下标确定16的权sum=sum+(*s1-48)/fun(s3-s1);   //将字符转换成数字 * 16的权elseif(*s1>='A'&&*s1<='Z')
sum=sum+(*s1-55)/fun(s3-s1);
elseif (*s1>='a'&&*s1<='z')
sum=sum+(*s1-87)/fun(s3-s1);
        }
elseif(*s3=='.')                        //求整数部分,*s3='.',说明有小数        {
if(*s1>=48&&*s1<=57)                 //根据小数点的下标确定16的权sum=sum+(*s1-48)*fun(s1-s3-1);    //将字符转换成数字 * 16的权elseif(*s1>='A'&&*s1<='Z')
sum=sum+(*s1-55)*fun(s1-s3-1);
elseif (*s1>='a'&&*s1<='z')
sum=sum+(*s1-87)*fun(s1-s3-1);
        }
else        {
if(*s1>=48&&*s1<=57)         //将字符转换成数字 * 16的权sum=sum+(*s1-48)*fun(s1-s);
elseif(*s1>='A'&&*s1<='Z')
sum=sum+(*s1-55)*fun(s1-s);
elseif (*s1>='a'&&*s1<='z')
sum=sum+(*s1-87)*fun(s1-s);
        }
    }
printf("%f",sum);
}
目录
相关文章
|
8月前
|
存储 C语言
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
137 0
|
8月前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
122 0
|
C语言
C语言之将十进制整数转换为任意进制整数
C语言之将十进制整数转换为任意进制整数
246 0
|
C语言
C语言之十进制转化为十六进制
C语言之十进制转化为十六进制
179 0
|
3月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
226 1
|
6月前
|
存储 C语言
C语言18---常用的进制
C语言18---常用的进制
|
8月前
|
C语言
每天一道C语言编程(2^k进制数)
每天一道C语言编程(2^k进制数)
37 0
|
8月前
|
C语言
【C语言】如何只打印小数的有效数字位数且不补0
【C语言】如何只打印小数的有效数字位数且不补0
124 0
【C语言】如何只打印小数的有效数字位数且不补0
|
C语言
C语言:二进制、八进制、十六进制整数的书写及输出
C语言:二进制、八进制、十六进制整数的书写及输出
|
8月前
|
C语言
C语言进阶教程(位操作和进制数的表示)
C语言进阶教程(位操作和进制数的表示)
87 0