觉得这道题主要还是理解停止条件是什么,用两个数组分别存储除数和余数,当出现一组除数和余数存在于数组当中时就出现了循环
#include <iostream>
#include <vector>
using namespace std;
int main() {
int a, b, flag = 0, length = 0, start = 0; // length不计入0号单元
vector<int> v1, v2;
int m, n;
while (cin >> a >> b) {
v1.push_back(a/b);
v2.push_back(a%b);
v1.push_back(v2[0]*10/b);
v2.push_back(v2[0]*10%b);
length = 1;
while (1) {
m = v2[length]*10/b;
n = v2[length]*10%b;
length++;
for (int i = 1; i < length; i++)
if (m == v1[i] && n == v2[i]) {
flag = 1;
start = i;
break;
}
if (flag)
break;
v1.push_back(m);
v2.push_back(n);
}
printf("%d/%d = %d.", a, b, v1[0]);
for (int i = 1; i < length; i++) {
if (start == i)
putchar('(');
if (i > 50) {
printf("...");
break;
}
cout << v1[i];
}
cout << ')' << endl;
printf(" %d = number of digits in repeating cycle\n\n", length - start);
flag = 0, length = 0, start = 0;
v1.clear();
v2.clear();
}
return 0;
}