69,382
社区成员
发帖
与我相关
我的任务
分享
#include "stdio.h"
int integer(int zhengshu);
float decimal(float xiaoshu);
int main(void)
{
float n,xs;
int zs;
printf("\n enter 2 jinzhi:");
scanf("%f",&n);
zs=(int)n;
xs=n-zs;
printf("\n10 jinzhi:");
printf("%f",(integer(zs)+ decimal(xs)));
// getch();
}
int integer(int zhengshu) /* 处理整数部分*/
{
static int m,t1=1,sum1=0; /*m为各位数,t为各位权值*/
m=zhengshu%10;
if((zhengshu/10)!=0)
{
sum1+=m*t1;
t1*=2;
integer(zhengshu/10);
}
else if((zhengshu/10)==0)
{
return sum1+m*t1;
}
}
float decimal(float xiaoshu)
{
static float t2=2; //这里原来的int要改成float,不然下面n/t2就变成int/int,结果还是一个int(1/2==0)
static float sum2=0;
int n;
float f;
if(xiaoshu>0)
{
f=xiaoshu*10;
n=(int)f;
sum2+=n/t2;
t2*=2;
f=f-n;
decimal(f);
}
// else if(xiaoshu==0) //浮点数在内存中保存是不精确的,也就是说你不能拿它跟一个比较是不是相等,因为很可能1.5可能用float来存会得
//到1.49999999999 它永远不会直接==1.5, 所以通常用fabs(a-b)<1e-6(一个很小的数),来比较两个浮点数是否相等,
//你的程序在这里不用这个else if也行,所以直接去掉吧
return sum2;
}