#include<stdio.h>
#include<string.h>
int figure[10000];
int as[10000];
int main(){
int a,b,itg;
while(scanf("%d%d",&a,&b)!=EOF){
memset(figure,0,sizeof(figure));
memset(as,0,sizeof(as));
int m,n;
int a1;
a1 = a;
itg = a/b;
a = a%b;
as[0] = a;
for(int i = 0 ; i<10000 ; i++){
figure[i] = a*10/b;
a = a*10%b;
as[i+1] = a ;
for(int j = 0 ; j<i+1 ; j++){ //可以换成一个不需要for循环的方法:
if(a==as[j]){ //新建一个int str[1000]; 让str[a]++
m = i+1; //再查找str[a]是否为1;
n = j;
goto end;
}
}
}
end: if(m-1<=50){
printf("%d/%d = %d.",a1,b,itg); //怎样将“(”加入
for(int i = 0 ; i<m ; i++){
if(i==n) printf("(");
printf("%d",figure[i]);
if(i==m-1) printf(")\n");
}
}else{
printf("%d/%d = %d.",a1,b,itg); //怎样将“(”加入
for(int i = 0 ; i<51 ; i++){
if(i==n) printf("(");
if(i==50)
{
printf("...)\n");
break;
}
printf("%d",figure[i]);
}
}
printf(" %d = number of digits in repeating cycle\n\n",m-n);
}
}
/*
1. 输入a,b
2. 整数部分 int itg , 小数部分 int figure[10000] ; 存放a的数组 a[10000] ;int m,n; 分别为循环小数的起始位置与终止位置
3. itg = a/b;
a = a%b;
a[0] = a;
for(int i = 0 ; i<10000 ; i++){
figure[i] = a*10/b;
a = a*10%b;
a[i+1] = a ;
for(int j = 0 ; j<i+1 ; j++){ //可以换成一个不需要for循环的方法:
if(a==a[j]){ //新建一个int str[1000]; 让str[a]++
m = i+1; //再查找str[a]是否为1;
n = j;
goto end;
}
}
}
if(m-1<=50){
printf("%d/%d=%d.",a,b,itg); //怎样将“(”加入
for(int i = 0 ; i<m ; i++){
if(i==n) printf("(");
printf("%d",figure[i]);
if(i==m-1) printf(")\n");
}
}else{
printf("%d/%d=%d.",a,b,itg); //怎样将“(”加入
for(int i = 0 ; i<51 ; i++){
if(i==n) printf("(");
printf("%d",figure[i]);
if(i==50) printf("...)\n");
}
printf(" %d=number of digits in repeating cycle\n",m-n);
*/
/*
注意点:
1.对于小数部分可以像我们平常自己算小数一样让计算机去学习计算
2.在寻找周期串时,可以使用像上方所提到的,利用srt[a]++的方法,就不需要使用循环
3.三次presentation error 分别为: (1) 等号两边有空格
(2) 每一个输出中还存在着一个空行、
(3) 看清楚题目,以为如果超过50个小数位则从开头就
输入左括号,其实有个cycle在题目中明确提出
(1) (2) 看题目输出格式 (3)看题目中output要求
*/