当前位置: 代码迷 >> C语言 >> 请问一下有没有,小数化分数的代码?
  详细解决方案

请问一下有没有,小数化分数的代码?

热度:434   发布时间:2006-08-26 22:46:38.0
同意楼上,小数化分数就是个化简。

0。25 -- > 25/100 -> 1/4 ..

不用考虑循环吧。
0。33333333又不是0.3333333333333333333.................................?

呵呵。。
----------------解决方案--------------------------------------------------------
问一下10楼的。最大公约数的怎么求?
----------------解决方案--------------------------------------------------------

#include<stdio.h>
void main()
{
int a,b,num1,num2,temp;
printf("输入两个正整数:");
scanf("%d,%d",&num1,&num2);
if(num1<num2)
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
printf("最大公约数为%d",a);
}


----------------解决方案--------------------------------------------------------
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}

原理??
----------------解决方案--------------------------------------------------------
原理应该在学数据结构的时候有讲的
----------------解决方案--------------------------------------------------------

先生成分母是10的N次方的分数,然后分子分母求最大公约数。


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

谢谢,你看这个有什么问题? 可以通过,但最后"killing process"

#include<stdio.h>
#include<ctype.h>
main()
{char ch[30];
double m;
int k,j=1;
clrscr();
printf("Input decimal fraction:\n");
scanf("%f",&m);
k=getint(m);
while(m!=k)
{m*=10;
k*=10;
j*=10;
}
m=m/zdgys(m,j);
j=j/zdgys(m,j);
printf("The fenshu is %d/%d",m,j);
}
int getint(double a)
{int l;
l=(int)a;
return l;
}
zdgys(int c,int 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);
}


----------------解决方案--------------------------------------------------------
/*小数化分数,非循环*/
#include<stdio.h>
#include<ctype.h>
main()
{ double m,kd,j=1;
int k;
clrscr();
printf("Input decimal fraction:\n");
scanf("%1f",&m);
k=(int)m;
kd=(double)k;
while(m!=kd)
{m*=10;
j*=10;
k=(int)m;
kd=(double)k;
}
m=m/zdgys(m,j);
j=j/zdgys(m,j);
printf("The fenshu is %1f,%1f",m,j);
}
zdgys(int c,int 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);
} 又改了一下,能通过,但这次显示的是overflow,一定是double,int转换出了问题,但我找不出来.大家帮忙看看
----------------解决方案--------------------------------------------------------
用大数做
----------------解决方案--------------------------------------------------------
  相关解决方案