简单字符串处理。
1 #include2 #include 3 #include 4 #include 5 6 #define MAXN 25 7 char str[MAXN]; 8 int ten[15]; 9 10 int gcd(int m, int n) {11 if (m == 0)12 return n;13 if (m > n)14 return gcd(n, m);15 else16 return gcd(m, n%m);17 }18 19 int main() {20 int t, a, b, ka, kb, n, m;21 int i, k;22 bool hascircle;23 24 ten[0] = 1;25 for (i=1; i<15; ++i)26 ten[i] = ten[i-1]*10;27 28 scanf("%d", &t);29 while (t--) {30 scanf("%s", str);31 a = b = 0;32 ka = kb = 0;33 hascircle = false;34 // ignore 0.35 for (i=2; str[i]; ++i) {36 if (str[i] == '(') {37 hascircle = true;38 } else if ( isdigit(str[i]) ) {39 if (hascircle) {40 b = b*10+str[i]-'0';41 kb++;42 } else {43 a = a*10+str[i]-'0';44 ka++;45 }46 }47 }48 // a: integer for not circle part, b: integer for circle part49 // ka: number of bits for a, kb: number of bits for b50 // result = m/n;51 if (kb) {52 n = ten[ka+kb] - ten[ka];53 m = a*ten[kb]+b-a;54 } else {55 n = ten[ka];56 m = a;57 }58 k = gcd(m, n);59 printf("%d/%d\n", m/k, n/k);60 #ifndef ONLINE_JUDGE61 fflush(stdout);62 #endif63 }64 65 return 0;66 }