接下来要做的就是模拟上述过程了。
静下来想一下自己要得到的信息。
然后拿出来,就可以了,模拟嘛,都是这样的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char str[20];
int gcd(int a,int b)
{
return a%b==0?b:gcd(b,a%b);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",str);
int flg=false,fir,sec;
int len=strlen(str);
for(int i=2;i<len;i++)
{
if(str[i]=='(')flg=true,fir=i;
else if(str[i]==')')sec=i;
}
if(flg)
{
int head=0,tail=0,p=1,pp=1,ppp=1;
int len1=fir-2,len2=sec-fir-1;
int res=0,ret=0;
for(int i=2;i<fir;i++)
res=res*10+str[i]-'0';
for(int i=fir+1;i<sec;i++)
ret=ret*10+str[i]-'0';
for(int i=1;i<=len2;i++)
p*=10;
for(int i=1;i<=len1;i++)
ppp*=10;
pp=ppp*p;
int up=res*p+ret-res;
int down=pp-ppp;
//printf("---%d %d %d %d %d %d\n",res,ret,p,pp,up,down);
int G=gcd(up,down);
printf("%d/%d\n",up/G,down/G);
}
else
{
int up=0,down=1;
for(int i=2;i<len;i++)
{
up=up*10+str[i]-'0';
down*=10;
}
int G=gcd(up,down);
printf("%d/%d\n",up/G,down/G);
}
}
return 0;
}