循环小数算循环节什么的
手动算了一个1/7之后思路很清晰
循环节最大长度不会超过分母
why?多算几个循环小数你就懂了
刚开始是每出一个除数就往前查找,如果有一样的就break
但是混循环的小数过不了
一怒之下改为循环到底
这下混循环过了
循环节为一的bug了
然后加个判断
还有分子为0和能整除的特殊情况
都分开讨论一下
(补丁式A题
所以代码有点乱
#include<cstdio>
using namespace std;
int main(){
int up,down=0;
while(~scanf("%d %d",&up,&down)){
int arr[2][3005]={0};
int len=0,st=0;
int k=up;
while(len<down+3){
arr[0][len]=up/down;
up=arr[1][len]=up%down;
if(!up)
break;
len++;
up=up*10;
}
for(int i=1;i<len;i++){
for(int j=i+2;j<len;j++)
if(arr[1][j]==arr[1][i] && arr[0][j]==arr[0][i]){
len=j;
st=i;
break;
}
}
if(len-st==2 && arr[1][len]==arr[1][len-1])
len--;
if(up==0){
len+=2;
st=len-1;
}
printf("%d/%d = %d.",k,down,arr[0][0]);
for(int i=1;i<len;i++){
if(i==st) printf("(");
printf("%d",arr[0][i]);
if(i>49){
printf("...");
break;
}
}
printf(")\n");
printf(" %d = number of digits in repeating cycle\n\n",len-st);
}
return 0;
}