题目链接:http://poj.org/problem?id=1930
题意:给一个小数,循环节未知,要求转换为分数,求出分母最小的分数。
题解:无线循环小数转化分数,参见:无限循环小数化分数。枚举循环节。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> using namespace std; const int INF=0x3f3f3f3f; string s; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); string s; while(cin>>s) { if(s=="0") break; int zi=0; int mu=1; for(int i=2;i<s.size();i++) { if(s[i]=='.') break; zi=zi*10+(s[i]-'0'); mu*=10; } int div=10; int minmu=INF; int anszi,ansmu; while(mu>=div) { int fenzi=zi-zi/div; int fenmu=mu-mu/div; int g=gcd(fenzi,fenmu); //cout<<fenzi/g<<" "<<fenmu/g<<endl; if(fenmu/g<minmu) { minmu=fenmu/g; anszi=fenzi/g; ansmu=fenmu/g; } div*=10; } printf("%d/%d\n",anszi,ansmu); } return 0; }