思路
求循环节需要模拟循环小数的求解过程。那么什么时候会出现循环呢?在除的过程中,除数b是不变的,而被除数a一直在变化,那么当a变换为之前出现过的某个值时,就出现了循环。
求循环节需要模拟循环小数的求解过程。那么什么时候会出现循环呢?在除的过程中,除数b是不变的,而被除数a一直在变化,那么当a变换为之前出现过的某个值时,就出现了循环。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 3000;
int main(void)
{
int a, b;
while (scanf("%d%d", &a, &b) != EOF) {
printf("%d/%d = %d.", a, b, a/b);
a %= b;
int n = 0;;
int dec[N+1];
int arr[N+1];
bool used[N+1] = {0};
while (!used[a]) {
arr[n] = a;
used[a] = 1;
a *= 10;
dec[n] = a/b;
n++;
a %= b;
}
int m = 0;
for (m = 0; m < n; m++) {
if (arr[m] == a) break;
}
for (int i = 0; i < m; i++)
printf("%d", dec[i]);
printf("(");
for (int i = m; i < n && i < m+1000; i++)
printf("%d", dec[i]);
int len = n - m;
if (len > 1000) printf("...");
printf(")\n %d = number of digits in repeating cycle\n\n", len);
}
return 0;
}