只要明白一点,这就是水题。。。
那就是:只要余数出现重复,则循环节出现;
#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;
}