如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。
不仅仅分数存在循环节,很多取模的递推式的值也存在循环节,这是因为递推式当前项的值,是由之前几项决定的,当之前几项的值出现循环,后面的值也会跟着进入循环。
如果 1/n 是无限循环小数,关于他的循环节长度的描述正确的是?
最长只可能是 n - 1
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数。
1/6= 0.1(6) 循环节长度为1
1/7= 0.(142857) 循环节长度为6
1/9= 0.(1) 循环节长度为1
输入n(10 <= n <= 1000)
输出<=n的数中倒数循环节长度最长的那个数
10
7
先来思考循环小数为何会产生循环,这是因为在 10进制下,计算 1/n 时,我们每一步都是用上一步 %n 的余数乘 10,然后重复除 n ,继续用余数乘 10。而 %n 的结果不超过 n 个,因此在 n 次之内就会出现循环。
所以我们就套用这个方法,用余数来判断是否出现循环了,如果某个余数重复出现,我们认为两次出现的位置的差值,就是循环节的长度。
所以从大到小枚举数字,用数组记录 %n余数出现的位置即可。这个枚举有这样一个停止条件, %n的循环节长度不会超过 n ,如果在之前的枚举中,我们已经找到长度为l的循环节,那么所有小于l的数字则不必处理了。