兩個整數做除法,有時會產生循環小數,其循環部分稱為:循環節
比如,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 }