题目描述:简单的小学奥数题。
枚举循环点。
参考程序:
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<iostream>
#define INF 0x7f7f7f7f
using namespace std;
typedef int ULL;
ULL gcd(ULL a,ULL b){
if (!a)return b;
return gcd(b%a,a);
}
int main(){
string line;
while (cin>>line){
if (line=="0")break;
ULL mina=INF;
ULL minb=INF;
ULL num,k,all=0,a,b,l=0;
for (int i=2;line[i] != '.';i++){
all*=10;all+=line[i]-48;
l++;
}
num=all;k=1;
for (ULL i=1;i<=l;i++){
num/=10;
k*=10;
a=all-num;
b=(ULL)pow(10.0,l-i)*(k-1);
ULL j=gcd(a,b);
if (b/j<minb){
mina=a/j;
minb=b/j;
}
}
cout<<mina<<'/'<<minb<<endl;
}
return 0;
}