题目链接:https://projecteuler.net/problem=26
标记当前余数,如果某个余数出现过,则存在循环节,直接dfs即可
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10005;
int vis[MAXN];
int ans=0,mx=0;
void dfs(int now,int div,int dp)
{
if(now==0)
return ;
if(vis[now])
{
if(dp-vis[now]>mx)
ans=div,mx=dp-vis[now];
return ;
}
vis[now]=dp;
dfs(now%div*10,div,dp+1);
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
for(int i=2;i<=1000;i++)
{
memset(vis,0,sizeof(vis));
dfs(10,i,1);
}
printf("%d\n",ans);
return 0;
}