您的位置:首页 > 其它

hdu1717(小数化分数)

2016-11-02 16:56 169 查看

题意:

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


分析:

0.(47)=47.(47)−0.(47)99=4799

0.32(564)=32564.(564)−32.(564)10000−100=32564−3299900

代码:

#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;
}

/*
1
0.32(692307)
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数论 hdu