函数循环问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 02:03:35
#include<stdio.h>
#include<math.h>
void main()
{
double ten(double z);
double x,y;
printf("请输入一个二进制的数,我们好将它转换成10进制,如果输入的不是二进制数的话,我们就不能为你输出正确的结果,最多20位小数\n");
scanf("%f",&x);
y=ten(x);
printf("所求出你输入的二进制数的十进制数为:%.8f",y);
}
double ten(double z)
{
int a,b,c=0,d,e,f,g,r,q;
e=0;r=z;
double h=0;
for(a=1;a<=r;a=a*10)
{
b=z/a;
if (b==1)
{
c=a;
}
else c=c;
}
for(;c>=10;)
{
d=c/10;
e=e+1; /* 整数有多少位 */
}
for(;e>1;e--)
{
f=r/pow(10,e-1);
g=f*pow(2,e-1);
h=h+g; /* 整数部分和 */
r=r-f*pow(10,e-1);
z=z-f*pow(10,e-1);
}
double i,p,t; /* 开始小数部分运算 */
int l,n;
i=z;
for(l=1;l<=20;l++)
{
n=i*pow(10,l);
p=n*pow(2,-l);
q=q+p;
i=i-n/pow(

把你的ten改了一下,凑合着用吧

double ten(double num)
{
int i,j,k;
double ans=0;
double q;
i=(int)num;
num-=i;
for (k=1;i;k*=2)
{
ans+=(i%10)*k;
i/=10;
}
q=0.5;
for (i=0;i<20;i++)
{
num*=10;
if ((int)num) ans+=q;
num-=(int)num;
q/=2;
}
return ans;
}

精度上有点问题,因为计算机无法精确表示十进制小数,转换过程有损失
如果要解决精度问题得用字符串来记录读入的浮点数,不过写起来就有点麻烦了,不想写...

#include<stdio.h>
#include<math.h>
void main()
{
double ten(double z);
double x,y;
printf("请输入一个二进制的数,我们好将它转换成10进制,如果输入的不是二进制数的话,我们就不能为你输出正确的结果,最多20位小数\n");
scanf("%f",&x);
y=ten(x);
printf("所求出你输入的二进制数的十进制数为:%.8f",y);
}
double ten(double z)
{
int a,b,c=0,d,e,f,g,r,q=0,l,n;
double h=0,i,p,t;
e=0;r=z;
for(a=1;a<=r;a=a*10)
{
b=z/a;
if (b==1)
{