Kiss__to 2020-07-22 11:16 采纳率: 77.8%
浏览 170
已采纳

一个把小数转化为分数的代码(有点问题),有谁能看懂其中的逻辑吗?

本人是个小白,还请各位不吝赐教。
代码如下

#include<stdio.h> 
int main()
{
    double a=0.3;
    printf("a=%lf\n",a);
    long long int b=(long long int)a;
    a=a-(double)b;
    int c;
    long long int m,d;
    d=0;
    m=1;
    int n=0;
    while(a!=0)
    {
        a*=2;
        c=(int)a;
        d=d*2+c;
        m*=2;
        a=a-(double)c;
        n++;
        if(n==63) break;
    }
    long long int x=d;
    long long int y=m;
    long long int z=1;
    n=1; 
    while(z!=0){
        z=x%y;
        x=y;
        y=z;
        n++;
    }
    d/=x;
    m/=x;
    d=d+b*m;
    printf("\n%lld / %lld=%lf",d,m,(double)d/(double)m);
}

这段代码能实现部分小数转化为分数,我不需要知道怎么改,我想知道这里面求出分数的逻辑在哪,实在没看明白,感谢各位。

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-07-22 14:06
    关注

    小数转换为分数分为2个情况,一个是循环小数
    思路是将循环节除以对应位个9,比如
    0.121212...,转换为 12/99 (因为循环节为2位,所以是99)
    再计算最大公约数化简,得到4/33,所以就是4/33
    另一个是非循环小数,那么就是小数除以1后面位数个0
    比如
    0.12,就是12/100
    再化简,得到 3/25。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献