题意不多说,本人数学一般,没搞出来,下面这个博客分析得很好,粘下地址:
http://blog.csdn.net/sky_fighting/article/details/8652492
下面是本人自己代码,主要是方便自己看,献丑,大家可看上面大神的:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int real,ima,t1,t2;
int gcd(int a,int b)
{
int t;
while(t=a%b)
{
a=b;
b=t;
}
return b;
}
void solve()
{
int k=1,l=1;
if(t2==0)
{
while(t1--)
k*=10;
int ans=gcd(real,k);
printf("%d/%d\n",real/ans,k/ans);
}
else
{
int m=ima-real;
while(t2--)
k*=10;
while(t1--)
l*=10;
int n=k-l;
int ans=gcd(m,n);
printf("%d/%d\n",m/ans,n/ans);
}
}
int main()
{
int N;char c;
cin>>N;
while(N--)
{
scanf("%d",&real);c=getchar();
real=0,ima=0,t1=0,t2=0;
while((c=getchar())!='('&&c!='\n')
{
if(c<='9'&&c>='0')
{
real=real*10+c-'0';
t1++;
}
}
if(c=='\n'){solve();continue;}
ima=real;t2=t1;
while((c=getchar())!=')')
{
if(c<='9'&&c>='0')
{
ima=ima*10+c-'0';
t2++;
}
}
solve();
}
return 0;
}