UVa202Repeating Decimals (循环小数)

解答:

因为除数是固定的,所以只要判断被除数是否出现过即可。

#include<iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int m,n,vis[5000],res[5000],temp[5000],num,t,x;
int main()
{
    while(scanf("%d%d",&m,&n)==2) 
    {
        memset(vis,0,sizeof(vis));
        memset(res,0,sizeof(res));
        memset(temp,0,sizeof(temp));
        x = m/n;
        num=0;
        t=m;
        m=m%n;   
        while(vis[m]==0&&m!=0)
        {
            vis[m]=1;
            temp[m]=num;
            res[num]=m*10/n;
            num++;
            m=m*10%n;   
        }
        if (m==0)
        {
            printf("%d/%d = %d.",t,n,x);
            for (int i=0;i<num;++i)
              cout<<res[i];
            printf("(0)\n   1 = number of digits in repeating cycle\n");
        }
        else
        {
            printf("%d/%d = %d.",t,n,x);
            for(int i=0;i<temp[m];++i) printf("%d",res[i]);
            printf("(");
            if(num-temp[m]>50)
            {
                for (int i=temp[m];i<50+temp[m];++i) printf("%d",res[i]);
                printf("...");
            }
            else
                for (int i=temp[m];i<num;++i) printf("%d",res[i]);
            printf(")\n   %d = number of digits in repeating cycle\n",num-temp[m]);
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/satans/p/11114851.html