问题:
输入整数a和b,输出a/b的循环小数表示以及其循环节长度。例如 a=5 b=43 小数表示为0.(116279069767441860465),循环节长度为21;
分析:
长除法的计算过程
①mod = a%b;
②小数 = (mod*10) / b;
③mod = (mod*10)%b;
循环②③步,当出现重复的余数的时候,也就是循环节出现了
注意事项:
当循环上述2、3步骤时,出现余数为零的情况,即计算结果不是循环小数时,直接输出索引值,循环节长度为0。
C++实现:
1 #include<iostream> 2 using namespace std; 3 4 int main() { 5 int a, b, t, k; 6 cin >> a >> b; 7 int index = 0; 8 t = a%b; 9 if (t ==0) { 10 cout << index << " " << index << endl; 11 return 0; 12 } 13 int flag[10000] = {0}; 14 memset(flag,-1,1000); 15 k =0; 16 int length = 0; 17 while (true) { 18 t = (t*10)%b; 19 if (t == 0) { 20 index = ++k; 21 length = 0; 22 break; 23 } 24 25 if(flag[t] >= 0) { 26 index = flag[t]; 27 length = k - index; 28 break; 29 } 30 flag[t]=k; 31 k++; 32 } 33 34 cout << index << " " << length << endl; 35 return 0; 36 }