C语言求助!!!!任意给你一个二进制实数,请把它转化为十进制实数。

任意给你一个二进制实数,请把它转化为十进制实数。
例: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
做的结果不对

首先肯定,思路是对的,但是要注意,在你的程序里边,保证所有的变量都用float或者double类型去表示,不能用浮点数表示的也要强制转化成浮点数再计算——追问

就是在第二部分的时候出错,首先,用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;

}

我这边没有编译器,没有经过编译,纯手打,你自己调试一下吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-21
你算的是正确的。追问

程序写不出来

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网