HDU 1717 小数化分数2
http://www.cnblogs.com/183zyz/archive/2011/04/12/2013372.html
View Code
#include<stdio.h> #include<string.h> int f(int x) { int i, sum = 1; for(i = 1; i <= x; i++) sum *= 10; return sum; } int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } int main() { int i, j, cas; char s[33]; int x, y, t; scanf("%d", &cas); while(cas--) { scanf("%s", s); int a = 0, b = 0, p = 0, q = 0; int len = strlen(s); bool flag = 0; for(i = 2; i < len; i++) { if(s[i] == '(') {flag = 1; continue;} if(s[i] == ')') continue; a++; p = p*10 + s[i] - '0'; if(!flag) {q = q*10 + s[i] - '0';} if(flag) b++; } //printf("a = %d, b = %d, p = %d, q = %d\n", a, b, p, q); if(!flag) { y = f(a); x = p; } else { if(a == b) { x = p; y = f(b) - 1; } else { x = p - q; y = f(a) - f(a-b); } } t = gcd(x, y); x /= t; y /= t; printf("%d/%d\n", x, y); } return 0; }


浙公网安备 33010602011771号