这题有点难度 ,首先计算出小数点前面的数,并记录小数点后每一位的值以及得到该值的余数和出现该余数的位数,直到出现余数与前面相等或余数为0时终止并记下终止位数
#include<stdio.h>
#include<string.h>
int s[3003],r[3003],t[3003];
int main()
{
int a,b,i;
while(~scanf("%d%d",&a,&b))
{ int n=a;int count=1;
memset(s,0,sizeof(s));memset(r,0,sizeof(r));memset(t,0,sizeof(t));
r[0]=a/b;
a=a%b;
while(!s[a]&&a)
{
r[count]=a*10/b;
t[count]=a;
s[a]=count;
count++;
a=a*10%b;
}
printf("%d/%d = %d.",n,b,r[0]);
for(i=1;i<count&&i<=50;i++)
{
if(s[a]==i) printf("(");
printf("%d",r[i]);
}
if(a==0) printf("(0");
if(count>50) printf("...");
printf(")\n");
printf(" %d = number of digits in repeating cycle\n\n",a==0?1:count-s[a]);
}
}