POJ 1930 Dead Fraction(小数化分数)

来源:互联网 发布:华讯网络好吗 编辑:程序博客网 时间:2024/05/14 16:57

题目链接: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;}


0 0