任意给你一个二进制实数,请把它转化为十进制实数。
例:111.101 有两部分
第一部分整数部分111转化为7(这个大家都知道1*2^2+1*2^1+1*2^0=4+2+1=7)
第二部分0.101的转化(1*2^(-1)+0*2^(-2)+1*2^(-3)=0.5+0+0.125=0.625)
所以最后二进制向十进制转化的结果为整数部分和小数部分相加:7+0.625=7.625
做的结果不对
就是在第二部分的时候出错,首先,用while循环,把零点几的小数转化成整数,判断条件用while(b-floor(b) > 0)b指一个零点几的小数,但是我发现结果不对,转化的整数不正确!!求代码
追答char a[100]; //默认你的二进制存储在这个数组里边,并且你在输入二进制的时候没有错误,错误判断你自己再输入的时候做一下
float fun()
{
float ret=0.0;
char *p=a;
float power = 1;
float level=1;
int temp;
int n=0;
while(*p==' ')p++; //去空格
while(*p=='-'){p++;power=-1;} //取+/-,号
while(*p!='\0'&&*p!= '.')p++,n++; //查找小数点
temp=n;
while(n>0)
{
ret+= (*p-'0')*level;
level*=10;
p- -;
n- -;
} //整数部分
level=1/10;
p=p+temp+1; //计算小数部分
while(*p!='\0')
{
ret+=(*p-'0')*level;
level/=10;
p++;
}
return power*ret;
}
我这边没有编译器,没有经过编译,纯手打,你自己调试一下吧
程序写不出来