hdu1717(小数化分数)

来源:互联网 发布:apache开启rewrite 编辑:程序博客网 时间:2024/05/17 22:04

题意:

将小数化为分数(小数可为循环小数和不循环的普通小数)

分析:

0.(47)=47.(47)0.(47)99=4799
0.32(564)=32564.(564)32.(564)10000100=325643299900

代码:

#include<cstdio>#include<cstring>using namespace std;long long x,y,n,d;char s[10000];long long gcd(long long x,long long y){    if (y==0) return x;    return gcd(y,x%y);}int main(){    int T;    scanf("%d",&T);    while (T--)    {        scanf("%s",s+1);        int len=strlen(s+1);        int t=3;x=d=0;y=1;        while (s[t]!='(' && t<=len)        {            x=x*10+s[t]-'0';            y*=10,t++;        } t++;n=y;        if (s[t]!=')' && t<=len)            d=x,x=x*10+s[t]-'0',y*=9,t++,n*=10;        while (s[t]!=')' && t<=len)        {            x=x*10+s[t]-'0';            y+=9*n;n*=10;            t++;        }        x-=d;        long long m=gcd(x,y);        printf("%I64d/%I64d\n",x/m,y/m);    }    return 0;} /*10.32(692307)*/
0 0