把 分数化为循环小数 和 把循环小数化为分数 的方法

来源:互联网 发布:计算器软件哪款好用 编辑:程序博客网 时间:2024/04/28 21:03

今天学习了把分数化为循环小数,下面代码实现的功能是:输入m/n,如果m能被n整除,则直接输出商;否则,输出商以后再输出循环节。

#include<cstdio>#include<cstring>const int MAXN = 100005;int a[MAXN], vis[MAXN];int main(){    int n, t, i, m;    scanf("%d",&t);    while(t--)    {        memset(vis, 0, sizeof(vis));        scanf("%d/%d",&m,&n);        if(m > 0 && n < 0)        {            printf("-");            n = -n;        }        else if(m < 0 && n > 0)        {            printf("-");            m = -m;        }        if(m % n == 0)        {            printf("%d\n",m/n);            continue;        }        else        {            if(m > n)            {                printf("%d.",m/n);                m = m % n;            }            else                printf("0.");        }        int s = m, num = 0;        vis[s] = 1;        while(1)        {            s *= 10;            a[num++] = s / n;            s %= n;            if(vis[s] || s == 0) break;  //余数再次出现或者余数为0(即可以整除)            vis[s] = 1;        }        for(i = 0; i < num; i++)            printf("%d", a[i]);        printf("\n");    }    return 0;}

把循环小数化为分数的方法:对于纯循环小数(从小数点后第1位开始循环)x,假设循环节为R,它包括l个数字,则有10^l*x - x = R,因此x = R/(10^l - 1)。

例如,若x = 0.123 123 123…,则R = 123, l = 3, 因此x = 123/999 = 41/333。


0 0
原创粉丝点击