基准时间限制:1 秒 空间限制:131072 KB 分值: 20
难度:3级算法题
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数。
1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1) 循环节长度为1
Input
输入n(10 <= n <= 1000)
Output
输出<=n的数中倒数循环节长度最长的那个数
Input示例
10
Output示例
7
循环区间最大为1000====
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int shu[3000];
int slove(int xx)
{
int yu=1;
for (int i=1;i<=2500;i++)
{
yu%=xx;
shu[i]=yu;
if (yu==0)
return 0;
yu*=10;
}
for (int i=2499;i;i--)
{
if (shu[i]==shu[2500])
{
return 2500-i;
}
}
}
int main()
{
int p=0,ji,ans=1;int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
ji=slove(i);
if (ji>p)
{
p=ji;
ans=i;
}
}
printf("%d\n",ans);
return 0;
}