恩,这是第三章中最有意思的题目了。
循环小数要怎么判定? 每次进位都会得到一个余数,如果得到的余数与之前的重复,说明已经出现了循环。
这细节有点难写,我以前好像写了一个下午。。。
#include <cstdio>
#include <cstring>
int main()
{
/* freopen("stand.txt","r",stdin);
freopen("stand2.txt","w",stdout);*/
int Nu,De;
while(scanf("%d%d",&Nu,&De)!=EOF)
{
bool stop=1;
int a=Nu/De;
printf("%d/%d = %d.",Nu,De,a);
int r=Nu-a*De,place[3003],d[3003],position=1;
memset(place,0,sizeof(place));
memset(d,0,sizeof(d));
while(!place[r])
{
place[r]=position;
r*=10;
d[position]=r/De;
r=r-d[position]*De;
position++;
}
int pl1=place[r];
for(int i=1;i<pl1;i++) printf("%d",d[i]);
printf("(");
int cnt=0;
for(int j=pl1;j<position;j++){
cnt++;
if(cnt<=50 ) printf("%d",d[j]);
else {
if(stop)
printf("...)\n"),stop=0;
}
}
if(stop) printf(")\n");
printf(" %d = number of digits in repeating cycle\n\n",cnt);
}
}