您的位置:首页 > 其它

nefuoj-1011:最长循环节

2016-02-10 22:21 337 查看

Problem : 1011

Time Limit : 1000ms

Memory Limit : 65536K

description

正整数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的数中倒数循环节长度最长的那个数

sample_input

10

sample_output

7

hint

source

51nod点头网

题解:林大的oj网站上的题做起来就是舒服,中文题多啊~抽屉原则,水题,但是需要一点思想,新手,代码可能不够简洁,大家理解意思就好。

code:

//2016.2.10

//做完刘汝佳59页3.8练习以后再nefuoj上找到的练习;

//依旧是同一个思路;

//难得的一次ac的题;

#include <iostream>

using namespace std;

int main()

{

double digit[1050];//每一位的小数;

int integer[1050];//每一位的整数;

int ans;

int ansn=1;

int n;

while(cin>>n)

{

for(int i=4; i<=n; i++)//4之前的循环节都是1,所以从4开始循环就可以;

{

bool flag=0;

digit[0]=1;

integer[0]=1.0/(i*1.0);

for(int j=1; ; j++)

{

digit[j]=(digit[j-1]-integer[j-1]*i)*10;

integer[j]=digit[j]/i;

for(int k=1; k<j; k++)

{

if(digit[j]==digit[k])

{

ans=j-k+1;

flag=1;

break;

}

}

if(flag) break;

}

ansn<ans? ansn=ans: ansn=ansn;//求ans的最大值;

}

cout<<ansn<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: