hdu 1717 小数化分数

来源:互联网 发布:java支持linux 编辑:程序博客网 时间:2024/06/05 16:11

hdu  1717  小数化分数                 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1717

数学

题目分析:会补上的……

code:

#include <iostream>#include <algorithm>#include <string>using namespace std;long long gcd(long long a,long long b){//参数也要是long long,之前写成int了    if(a==0)return b;    if(b==0)return a;    return gcd(b,a%b);}int main(){    long long t,a,b,xh,bx,flag,xhm,bxm,g;    string c,cxh,cbx;    while(cin>>t)    {        for(int i=1;i<=t;i++)        {            flag=1;             xh=bx=0;            cin>>c;            c.erase(0,2);//去掉0.             cxh.clear();            cbx.clear();            if(c.find('(')!=string::npos)cxh.assign(c,c.find('(')+1,c.find(')')-c.find('(')-1);//循环部分 拷到cxh             //c.erase(c.find('('),c.find(')')-c.find('('));拷完擦除             cbx.assign(c,0,c.find('('));//非循环部分拷入cbx             reverse(cxh.begin(),cxh.end());//反转使低位在前              reverse(cbx.begin(),cbx.end());            //cout<<cxh<<endl<<cbx<<endl;             for(int j=0;j<cxh.size();j++)            {                xh+=flag*(cxh[j]-'0');                flag*=10;                //cout<<"&&&  "<<xh<<"  &&&"<<endl;            }            xhm=flag-1;             //cout<<"循环部分先母后子:  "<<xhm<<"   "<<xh<<endl;            flag=1;            for(int j=0;j<cbx.size();j++)            {                bx+=flag*(cbx[j]-'0');                flag*=10;            }            bxm=flag;            //cout<<"非循环部分先母后子:  "<<bxm<<"   "<<bx<<endl;            //cout<<"output end"<<endl;            xhm+=(!xhm);            bxm+=(!bxm);            xhm*=bxm;            g=gcd(xhm,xh);            xhm/=g;            xh/=g;            g=gcd(bxm,bx);            bxm/=g;            bx/=g;            a=xh*bxm+bx*xhm;            b=bxm*xhm;            g=gcd(a,b);            a/=g;            b/=g;            //cout<<"Case "<<i<<": "<<a<<'/'<<b<<endl;            cout<<a<<'/'<<b<<endl;        }    }    return 0;}

PS:从师哥的steps里搞来的一道题,得到思想之后代码是自己写的,结果wrong,不知怎么改就放下了,今天打扫unsolved problem list的时候翻出以前存下的wrong代码,只改了第六行那一点,就A了,这是近几个月最快的一道题O(∩_∩)O哈!






原创粉丝点击