做法很有意思的题目,详解参考http://www.cnblogs.com/zerojetlag/archive/2013/02/01/2889378.html
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define pi acos(-1.0)
#define eps 1e-8
typedef long long ll;
const int inf = 0x3f3f3f3f;
int dig[20];
int tot;
int gcd(int a, int b)
{
if(b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
dig[0] = 1;
for( int i = 1; i <= 10; i++ )
{
dig[i] = dig[i-1] * 10;
}
scanf("%d", &tot);
while( tot-- )
{
char c[20];
scanf("%s", c);
int p;
int x = 0;
for( p = 2; c[p] != '(' && c[p] != '\0'; p++ )
x = x * 10 + c[p] - '0';
//cout << p << endl;
if( c[p] == '\0' )
{
if( x == 0 )
{
printf("0\n");
continue;
}
int v = __gcd(dig[p-2], x);
printf("%d/%d\n", x/v, dig[p-2]/v);
continue;
}
int xx = 0;
int tmp = x;
int pp = p;
for( pp++ ; c[pp] != ')'; pp++ )
xx = xx * 10 + c[pp] - '0', x = x * 10;
//cout << pp << endl;
int z = dig[pp-3] - dig[p-2];
x = x + xx - tmp;
//cout << x << " " << z << endl;
int v = __gcd(z, x);
printf("%d/%d\n", x/v, z/v);
}
return 0;
}