怎样把小数变成分数。比如说2.5=5⼀2。 求算法!

2024-11-21 20:48:25
推荐回答(3个)
回答1:

/*算法是这样 :

①:获取小数num小数点后有i位。 例如num=2.5,则i=1;

②:于是分数就可以写成为num*10^i/10^i (10^i表示10的i次方)

③:化简,分子分母分除以最大公约数

*/

#include 

int ten(int n) //求10的n次方的值

{

 int sum=1;

 for(int i=0;i

  sum=sum*10;

 return sum;

}

int gcd(int d,int f)//求两个数的最大公约数,用的是辗转相除法

{

    int r,temp;

 if(d

 {

    temp=d;

    d=f;

    f=temp;

 }

 while(f!=0)

 {

  r=d%f;

  if (r

  {

   d=f;

   f=r;

  }

  else

   d=r;

 }

 return d;

}

void main()  //主函数

{

 float numF;//输入的小数

 int   numI;//小数的整数部分

 int   k;//最大公约数

 int   i=0;//小数的位数

 scanf("%f",&numF);

 numI=numF; //c语言中,浮点型赋给整型时,只取其整数部分,

            //所以可以用这个方法获取小数的整数部分

 while(numF-numI>0)//下面是关键算法,将小数逐步乘以10

                          //当且仅当小数减去它的整数部分=0,它才

                          //变成了整数

 {

  numF=numF*10;

  numI=numF;

  i=i+1;

 }

 k=gcd(numI,ten(i));//最大公约数

  printf("%d/%d",numI/k,ten(i)/k);//最后输出

}

回答2:

你可以设分母为X等于1
那么2.5X/X = 2.5
X不断递增,直到2.5X不是一个小数就OK了

判断是不是小数的方法:令其乘二,再整除二,看是否等于原先那个数,如果是,那么就不是小数了

回答3:

2.5=2.5/1
=(2.5*10)/(1*10)
=25/10
=5/2