当前位置: 代码迷 >> C语言 >> 小数化分数
  详细解决方案

小数化分数

热度:618   发布时间:2006-09-09 23:56:48.0
小数化分数
/*小数化分数,非循环*/
#include<stdio.h>
#include<ctype.h>
#include<math.h>
double zdgys(double c,double d)
{double o,p;
o=1;p=1;
while(c/o!=d/p)
{while(c/o>d/p)
o++;
while(c/o<d/p)
p++;
}
while(c/o==d/p)
return (c/o);
}
main()
{ double m,im,j=1;
int l;
/* clrscr(); */
printf("Input decimal fraction:\n");
scanf("%f",&m);
im=floor(m);
while(m!=im)
{m*=10;
j*=10;
im=floor(m);
}
l=zdgys(m,j);
m=m/l;
j=j/l;
printf("The fenshu is %f,%f",m,j);
}
搜索更多相关的解决方案: 化分  小数  

----------------解决方案--------------------------------------------------------

将小数看成是整数,分母就是10的位数次方再除去以上个2(5).对分子,分母同时循环除以2或是5(如果最后一位不是2或5则不用做了.)得出的结果就是要的分数.



举个例子:0.128

128 64 32 16
---- = ---- = ---- = ----
1000 500 250 125


----------------解决方案--------------------------------------------------------

不如让小数不停乘10,直到变成整数,在统计是10乘了几次,在让他们(分子/分母=10^n)分别除以他们的最大公约数。



----------------解决方案--------------------------------------------------------

有什么不同吗?


----------------解决方案--------------------------------------------------------

我的具体明白些!


----------------解决方案--------------------------------------------------------
  相关解决方案