Repeating Decimals UVA - 202
题意:输入一下a, b, 来求一下a / b的循环小数,表示以及循环节长度。注意格式。
小知识点,两次出现一样的余数时,出现循环。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100020;
int a, b;
int loc[maxn], res[maxn];
int main()
{
while(~scanf("%d%d", &a, &b))
{
memset(loc, 0, sizeof(loc));
printf("%d/%d = %d.", a, b, a / b);
a = a % b;
int ed = 1;
while(!loc[a]) // 两次出现同一余数进入循环。
{
loc[a] = ed;
a *= 10;
res[ed++] = a / b;
a %= b;
}
for(int i = 1; i < loc[a]; i++)
printf("%d", res[i]);
printf("(");
int leg = ed - loc[a];
if(leg > 50) ed = 51;
for(int i = loc[a]; i < ed; i++)
printf("%d", res[i]);
if(leg > 50) printf("...");
printf(")\n");
printf(" %d = number of digits in repeating cycle\n\n", leg);
}
return 0;
}