补传一个之前在紫书上刷的题
原题:
代码:
#include<stdio.h>
#include<string.h>
int capacity[100000];//被除数相同说明已经进入循环。
int flag[100000];//根据抽屉原理,前3000位内循环必定发生。
int rec[100000];//数组开10万级别,不然可能越界。
int main(void)
{
int numerator,deminator;
while(scanf("%d %d",&numerator,&deminator)!=EOF)
{
memset(capacity,0,sizeof(capacity));
memset(flag,0,sizeof(flag));
memset(rec,0,sizeof(rec));
printf("%d/%d = %d.",numerator,deminator,numerator/deminator);
numerator=(numerator%deminator)*10;
int cnt=1;
while(!flag[numerator]&&numerator)
{
flag[numerator]=cnt;
rec[cnt]=numerator;
capacity[cnt++]=numerator/deminator;
numerator=(numerator%deminator)*10;
}
int i;
if(cnt>51)
{
for(i=1;i<=50;i++)
{
if(numerator&&numerator==rec[i])
{
printf("(");
}
printf("%d",capacity[i]);
}
}
else
{
for(i=1;i<cnt;i++)
{
if(numerator&&numerator==rec[i])
{
printf("(");
}
printf("%d",capacity[i]);
}
}
if(!numerator)
{
printf("(0");
}
if(cnt>51)
{
printf("...");
}
printf(")\n");
printf(" %d = number of digits in repeating cycle\n\n",numerator?cnt-flag[numerator]:1);
}
return 0;
}