标签:
输入n(10 <= n <= 1000)
输出<=n的数中倒数循环节长度最长的那个数
10
7
代码如下:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; typedef long long LL; int len[1005]; int a[1005]; int calc(int xx) { int tot=0,pos=0; int x[10],y[10]; int tmp1,tmp2=1,flag=0; while(1) { tmp1=(tmp2*10)/xx; tmp2=(tmp2*10)%xx; if(tmp1==0&&tmp2==0) return 0; if(tmp1) flag=1; if(flag) pos++; if(flag&&tot<8) { x[tot]=tmp1; y[tot++]=tmp2; } for(int i=0;i<tot-1;i++) { if(tmp1==x[i]&&tmp2==y[i]) { return pos-i-1; } } } } void init() { for(int i=3;i<1005;i++) { len[i]=calc(i); } int tmp=-1; int posi=-1; for(int i=3;i<1005;i++) { if(len[i]>tmp) { tmp=len[i]; posi=i; } a[i]=posi; } } int main() { int n; init(); while(scanf("%d",&n)!=EOF) { cout<<a[n]<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/chen9510/p/5635847.html