首先想到n中为2或5的全部质因子不会影响循环节(如果有)的长度,原因很简单,2和5本身就能被1除尽,所以先把因子2和5筛掉,然后就是这个数字1必然除不尽,所以直接用1除,其实就是用1乘10对n取模,然后余数继续乘10对n取模,反复操作,直到余数再次为1,循环的次数即为循环节的长度,不理解的话可以在纸上模拟运算一下比如1/7的过程。
(ps)其实就是模拟除法过程,这种解法也避免了非纯循环小数的问题等等各种问题,思路来自“扇贝杯”题解。
#include <cstdio>
int cul(int n)
{
while(n%2==0)
{
n/=2;
}
while(n%5==0)
{
n/=5;
}
if(n==1)
{
return 0;
}
int ans=10;
int sum=1;
while(ans%n!=1)
{
ans=ans%n;
ans=ans*10;
sum++;
}
return sum;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",cul(n));
}
return 0;
}