题意:
将小数化为分数(小数可为循环小数和不循环的普通小数)
分析:
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)
*/