最长的循环节
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\n",x); 25 } 26 if(vis[y]) a[i]=z; 27 else a[i]=0; 28 // printf("%d\n",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\n",j); 41 return 0; 42 }