a/b化为最简a′/b′后,我们模拟除法列竖式求答案的过程。由于列竖式的过程中余下的数总比b'小,所以最多b'个不同余数,列竖式的过程中一旦出现相同的余数则是进入了循环。所以我们最多做b'次除法就能求出c是否存在于该分数小数点后以及c的位置。
代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
int c;
while(b)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int a,b,c,d,e,i;
cin>>a>>b>>c;
d=gcd(a,b);
a/=d;
b/=d;
d=a/b;
a-=d*b;
a*=10;
for(i=1;i<=100000;i++)
{
d=a/b;
a-=d*b;
if(d==c)
break;
a*=10;
}
if(i>100000)
cout<<"-1"<<endl;
else
cout<<i<<endl;
return 0;
}