杭电-1717-小数化分数2

来源:互联网 发布:免费好用的mac清理软件 编辑:程序博客网 时间:2024/05/16 14:59

小数化分数2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4220    Accepted Submission(s): 1702


Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
 

Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
 

Output
对每一个对应的小数化成最简分数后输出,占一行。
 

Sample Input
30.(4)0.50.32(692307)
 

Sample Output
4/91/217/52
 
代码:
#include<iostream>#include<string>using namespace std;int gcd(int a, int b){while (a ^= b ^= a ^= b %= a);return b;}int main(){int t;cin >> t;while (t--){string s;cin >> s;int len = s.length();int a = 0, b = 0, c = 0, d = 1;bool isq = true;for (int i = 2; i < len; ++i){if (s[i] == ')'){break;}if (s[i] != '(' && isq){a *= 10;a += (s[i] - '0');d *= 10;}else if (s[i] == '('){b = a;isq = false;}else{b *= 10;b += (s[i] - '0');c *= 10;c += 9;}}if (isq){b = a;c = d;}else{b -= a;c *= d;}int g = gcd(b, c);cout << b / g << "/" << c / g << endl;}return 0;}


0 0
原创粉丝点击