问题:
输入整数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 }
转载于:https://www.cnblogs.com/TonvyLeeBlogs/p/9563915.html