这题第一次提交时报PE,随后修改了2处
1.把循环节长度的输出格式由“%4d”改成了“ %d”
2.把循环节长度输出语句末尾的“\n\n”改成“\n",然后加了一个条件输出,判断是否是第一次输出答案,是则直接输出,否则加空行”\n“与前一个答案隔开一行。
然后就开始wa,反复修改后发现第二步是多余的,去掉条件输出,把循环节长度输出语句末尾的“\n”改回“\n\n"就可以ac了。
原因在于题目的输出要求就是”Print a blank line after every test case.“ 条件输出纯属画蛇添足。
vjudge题号UVALive 5141
//#define LOCAL
//#define TESTING
#define MAXN 100000
#include<stdio.h>
#include<string.h>
int yu[MAXN],r[MAXN];
int main()
{
#ifdef LOCAL
freopen("xt3-8.in","r",stdin);
#endif
int a,b,T = 1,zhengshu,xiaoshu,temp;
bool first=true;
while(scanf("%d%d",&a,&b)==2)
{
int len = 0,replen=0,repbegin=0;
memset(yu,0,sizeof(yu));
memset(r,0,sizeof(r));
#ifdef TESTING
printf("%d %d\n", a, b);
#endif
zhengshu = a/b;
for(int i = 0; i < MAXN; i++)
{
if(i == 0) yu[0] = a%b;
else yu[i] = yu[i-1]*10%b;
r[i] = yu[i]*10/b;
len ++;
for(int j = 0; j < i ; j++)
{
if(yu[j]==yu[i])
{
len--;
replen=i-j;
repbegin=j;
i = MAXN;
break;
}
}
}
#ifdef TESTING
printf("a=%d b=%d\n", a, b);
printf("%d.",zhengshu);
for(int i = 0; i<len;i++) printf("%d",r[i]);
printf("\n");
for(int i = 0; i<len;i++) printf("%d ", yu[i]);
#endif
first = false;
printf("\n%d/%d = %d.", a, b,zhengshu);
for(int i = 0; i<repbegin+replen;i++)
{
if(i==repbegin)printf("(");
if(i<50)printf("%d",r[i]);
if((i==repbegin+replen-1)&&(i<=50))printf(")");
else if(i>50)
{
printf("...)");
break;
}
}
printf("\n %d = number of digits in repeating cycle\n\n",replen);
}
return 0;
}