最长的循环节

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035

因为结果要么是有限小数要么是无限循环小数,那么只要模拟这个过程,然后判断循环就跳出,记录循环次数就好。

 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 #include <map>
 5 using namespace std;
 6 int vis[1001],a[1001];
 7 int main()
 8 {
 9     //freopen("a.txt","r",stdin);
10     int x,y,z,k;
11     for(int i=1;i<=1000;i++)
12     {
13         memset(vis,0,sizeof(vis));
14         x=1,z=0,k=1;
15         while(1)
16         {
17             y=x%i;
18             x=x/i;
19             if(y==0||vis[y]) break;
20             vis[y]=1;
21             x=(k-x*i)*10;
22             k=x;
23             z++;
24             //printf("%d
",x);
25         }
26         if(vis[y]) a[i]=z;
27         else a[i]=0;
28        // printf("%d
",a[i]);
29     }
30     int n,j=1,ans=0;
31     scanf("%d",&n);
32     for(int i=1;i<=n;i++)
33     {
34         if(a[i]>ans)
35         {
36             ans=a[i];
37             j=i;
38         }
39     }
40     printf("%d
",j);
41     return 0;
42 }
原文地址:https://www.cnblogs.com/nowandforever/p/4620343.html