任意二进制转十进制数
程序代码:
#include<>
#include<>
#include<>
long float change(char str[],int n)
{
int xsd,i;
for(i=0;i<n;i++)
{
if(str[i]=='.')
{
xsd=i+1;//xsd为小数点位置
break;
}
}
if(i==n)
xsd=n+1;
long float sum,zs=0,xs=0;
for(int j=xsd-2,q=0;j>=0;q++,j--)
{
if(str[j]=='1')
zs+=powf(2,q);
}
if(xsd!=n+1)
{
for(int k=xsd;k<n;k++)
{
int m=(xsd-k)-1;
if(str[k]=='1')
xs+=powf(2,m);
}
printf("二进制小数点在第 xsd=%d 位上!\n",xsd);
printf("十进制小数部分值为:xs=%lf\n",xs);
}
printf("十进制整数部分值为:zs=%lf\n",zs);
sum=zs+xs;
return sum;
}
void main()
{
while(1)
{
char str[30];
puts("\n请输入一个任意位数二进制数:");
gets(str);
int n=strlen(str);
printf("二进制带小数点(若有)总长为:n=%d 位\n",n);
long float sum=change(str,n);
printf("转换为十进制数为:sum=%lf\n",sum);
}
}
程序运行结果:
任意二进制数转换为十进制数 来自淘豆网m.daumloan.com转载请标明出处.