[题目描述]
传送门
[题目分析]
就是一个模拟,不过稍微有点小复杂,而且输出格式有点小毒瘤.
不过只是RE了两发,PE了一发就过了,还是很开心.
需要注意数组要开很大,可能循环节出现在很后.
每个输出样例应该输出一个空行,最后面也应该有,不然会PE
[AC代码]
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cctype>
#include<queue>
#include<set>using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=1e5+5;int x,y,z;
int ans[MAXN];
int num[MAXN];
//bool first=true;int main()
{while(~scanf("%d%d",&x,&y)){memset(ans,0,sizeof(ans));memset(num,0,sizeof(num));z=x;ans[0]=x/y; x%=y; x*=10;for(int i=1;i;i++){bool flag=false; int idx=0;for(int j=1;j<i;j++){if(num[j]==x){flag=true;idx=j;break;}}if(flag){printf("%d/%d = %d.",z,y,ans[0]);for(int j=1;j<idx;j++) printf("%d",ans[j]);printf("(");if(i-idx<=50){for(int j=idx;j<i;j++) printf("%d",ans[j]);printf(")\n");}else{for(int j=idx,k=1;k<=50;k++,j++){printf("%d",ans[j]);}printf("...)\n");}printf(" %d = number of digits in repeating cycle\n\n",i-idx);break;}num[i]=x;ans[i]=x/y;x%=y; x*=10;}}return 0;
}