hdu 1717 小数化分数

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哈!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值