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);
}
目录
相关文章
|
2月前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
28 0
|
7月前
|
C语言
C语言之将十进制整数转换为任意进制整数
C语言之将十进制整数转换为任意进制整数
158 0
|
7月前
|
C语言
C语言之十进制转化为十六进制
C语言之十进制转化为十六进制
|
2月前
|
C语言
【C语言】如何只打印小数的有效数字位数且不补0
【C语言】如何只打印小数的有效数字位数且不补0
13 0
【C语言】如何只打印小数的有效数字位数且不补0
|
5月前
|
C语言
C语言进阶教程(位操作和进制数的表示)
C语言进阶教程(位操作和进制数的表示)
44 0
|
6月前
|
C语言
C语言:二进制、八进制、十六进制整数的书写及输出
C语言:二进制、八进制、十六进制整数的书写及输出
|
C语言
造轮子之-C语言实现ArrayList
造轮子之-C语言实现ArrayList
|
9月前
|
C语言
C语言和栈的基本操作实现进制数的转换
C语言和栈的基本操作实现进制数的转换
|
11月前
|
存储 C语言
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
什么是进制?在我们的生活中处处充满进制,一天是24个小时、一个小时是60分钟、一分钟是60秒、一个星期一共7天........还有大家听说过半斤八两这个词语吗?也就是说买半斤东西也就是八两,一斤也就是十六两,满16进一位这就是十六进制。我今天就当一次小学老师来考考你,5+8等于多少(我没有在和大家开玩笑)你会说等于13,你的回答就是十进制也就是满十进一,而在计算机中数字都是以二进制(只有1和0)存储的也就是满二进一位,当然也有八进制(从0到7)、十六进制(从0到F)都是类似的,八进制满八进一位,十六进制满十六进一位(其中十六进制10用A来表示,11-B、12-C、13-D、14-E、15-F)
81 0
|
12月前
|
存储 C语言
C语言-------如何打印保留小数点后1,2,..位
C语言-------如何打印保留小数点后1,2,..位