232 - Repeating Decimals

来源:互联网 发布:阿里云架设游戏教程 编辑:程序博客网 时间:2024/06/06 11:42

只要明白一点,这就是水题。。。

那就是:只要余数出现重复,则循环节出现;

#include<stdio.h>

#include<string.h>
int a[4000],b[4000];
int main()
{
    int i,j,k,t,m,n;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        int m1,n1,start,maxn=0;
        m1=m;n1=n;
        start=m/n;
        m=m%n;
        k=-1;t=-1;
        while(1)
        {
            a[maxn]=m;//a[maxn]//记录余数
            b[maxn++]=m*10/n;//记录小数部分
            m=m*10%n;//更新
            for(i=0;i<maxn-1&&maxn>1;i++){


                if(a[i]==a[maxn-1])
            {
                k=i;//k为起始
                t=maxn-1;//t为循环终结
                break;
            }
            }
            if(k>=0&&t>=0)
                break;
        }
        printf("%d/%d = %d.",m1,n1,start);
        for(i=0;i<maxn-1&&i<50;i++)
            {
                if(i==k)
                    printf("(");
                printf("%d",b[i]);
                if(i==maxn-2)
                    printf(")\n");
                if(i==49)
                    printf("...)\n");
            }
            printf("   %d = number of digits in repeating cycle\n",t-k);
            printf("\n");
    }
    return 0;
}
0 0
原创粉丝点击