求分數的循環節的長度


 

兩個整數做除法,有時會產生循環小數,其循環部分稱為:循環節

比如,11/13 = 0.846153846153...其循環節為846153共六位

 

思路:

模擬除法,只要尋找到相同余數,就找到了循環節

 

代碼如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <string>
 5 #include <math.h>
 6 #include <algorithm>
 7 #include <vector>
 8 #include <queue>
 9 #include <set>
10 #include <stack>
11 #include <map>
12 #include <sstream>
13 const int INF=0x3f3f3f3f;
14 typedef long long LL;
15 const int mod=1e9+7;
16 const int maxn=1e5+10;
17 using namespace std;
18 
19 vector<int> vt;
20 
21 int main()
22 {
23     int n,m;
24     scanf("%d %d",&n,&m);
25     int t=n;
26     int ans=0;
27     t=t%m;
28     while(1)
29     {
30         vt.push_back(t);//將余數存下 
31         t*=10;
32         t=t%m;
33         if(t==0) break;    //可以除盡 
34         else if(find(vt.begin(),vt.end(),t)!=vt.end())//找到相同的余數,即找到了循環節 
35         {
36             ans=vt.end()-find(vt.begin(),vt.end(),t);//求循環節長度 
37             break;
38         }
39     }
40     printf("%d\n",ans);
41     return 0;
42 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM