算法:求两个整数相除的循环节

发布于 2022-09-04 09:34:03 字数 213 浏览 10 评论 0

循环节定义:依照一定顺序,不断重复出现的所有数字,叫做这个循环小数的循环节.
例如:
1/3=0.3333……->0.[3]
1/7=0.142857142857142857……->0.[142857]
9/7=1.285714285714285714……->1.[285714]
13/6=2.1666……->2.1[6]

求[]中的数字

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尬尬 2022-09-11 09:34:03

循环节有很长的,例如:

1/9997=0.0001000300090027008102430729218765629688906672001600480144043 212963889166750025007502250675202560768230469140742222666800040012003 60108032409722916875062518755626688006401920576172851855556667,长度是 192

贴代码:

#include<stdio.h>
#define mn 1000
void main()
{
    int i,m,n,r,t;
    int p[mn],q[mn];

    for(i=0;i<mn;i++) //给数组p初始化值全为-1
    {
        p[i]=-1;
        q[i]=0;
    }

    printf("input :m,n(0<=m<n<=1000)= ");
    scanf("%d%d",&m,&n);

    t=0; //初始化值
    r=m; //把被除数赋给r

    while(r!=0&&(p[r]==-1)) //循环条件当r不为0且p[r]=-1时执行循环体
    {
        p[r]=t;             //余数r第一次出现的位置
        r=10*r;             //把被除数扩大10倍,以至于取第一个小数

        t++;
        q[t]=r/n;           //计算小数点后t位的值:取整,即为m/n的小数从小数点开始逐个取出放到数组q中
        r=r%n;              //算完一位就去掉一位,即取余对n
    }

    printf("m/n = 0.");     //因为m<n,所以m/n整数部分0,所以先输出'0.'
    if (r!=0)               //被除数不为0就执行以下语句
    {
        for(i=1;i<=p[r];i++)   //输出循环小数中前面非循环的部分
            printf("%d",q[i]);

        printf("(");            //输出循环的小数放在括号中

        for(i=p[r]+1;i<=t;i++)
            printf("%d",q[i]);

        printf(")");
    }
    else                    //被除数为0的情况
        for(i=1;i<=t;i++)    //输出不循环的小数
            printf("%d",q[i]);
    printf("/n");
}  

参考:

探讨循环小数的循环节
笔试题——输出循环小数的循环节

泡沫很甜 2022-09-11 09:34:03

麦克斯兄弟,麻烦您写个demo吧,不是实现方法,是你究竟表达的意思

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文