杭电ACM1717——小数化分数2

来源:互联网 发布:unity3d 布料系统 编辑:程序博客网 时间:2024/05/16 14:02

模拟题,百度一下小数化分数的方法,模拟那个过程就OK了。

#include <iostream>#include <cmath>#include <cstring>using namespace std;int getIndex(char *str){int count = 0, i = 0;bool flag = false;while(str[i] != '\0'){if(str[i] == '.')flag = true;if(flag && (str[i] >= '0' && str[i] <= '9'))count++;i++;}return count;}int getLoop(char *str){int count = 0, i = 0;bool flag = false;while(str[i] != '\0'){if(str[i] == '(')flag = true;if(flag && (str[i] >= '0' && str[i] <= '9'))count++;i++;}return count;}int check(char *str){int i = 0;while(str[i] != '\0'){if(str[i++] == '(')return 0;}return 1;}int gys(int x, int y){int tx = x, ty = y;int r = tx % ty;while(r){tx = ty;ty = r;r = tx % ty;}return ty;}int main(){char ch[200];int t;int a, b;cin >> t;while(t--){cin >> ch;if(check(ch) == 0){int num = getIndex(ch);int loop = getLoop(ch);b = (int)pow(10, num) - (int)pow(10, num - loop);int ans1 = 0, ans2 = 0;int i = 0;bool flag = true;while(ch[i] != '\0'){if(ch[i] == '(')flag = false;if(ch[i] >= '0' && ch[i] <= '9'){ans2 = ans2 * 10 + (ch[i] - '0');if(flag)ans1 = ans1 * 10 + (ch[i] - '0');}i++;}a = ans2 - ans1;}else{int num = getIndex(ch);b = (int)pow(10, num);a = 0;int i = 0;while(ch[i] != '\0'){if(ch[i] >= '0' && ch[i] <= '9'){a = a * 10 + (ch[i] - '0');}i++;}}int yue = gys(a, b);//cout << a << ' ' << b << ' ' << yue << endl;cout << a / yue << '/' << b / yue << endl;}return 0;}


0 0
原创粉丝点击