【问题描述】
任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。
【输入形式】
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
【输出形式】
对每一个对应的小数化成最简分数后输出,占一行
【样例输入】
3 0.(4) 0.5 0.32(692307)
【样例输出】
4/9 1/217/52
1 | : | #include<iostream> |
2 | : | #include<cmath> |
3 | : | #include<string> |
4 | : | using namespace std; |
5 | : | void yue(int,int); |
6 | 2 : | int main() { |
7 | 2 : | int n,i,j,a=0,b=0,fen=0,fen1=0,fen2=0,fenm=0; |
8 | 2 : | cin>>n; |
9 | 11 : | string str[n]; |
10 | 2 : | for(i=0; i<n; i++) cin>>str[i]; |
11 | 9 : | for(i=0; i<n; i++) { |
12 | 7 : | a=0; |
13 | 7 : | b=0; |
14 | 48 : | for(j=0; j<str[i].size(); j++) { |
15 | 41 : | if(str[i][j]=='(') a=j; |
16 | 41 : | if(str[i][j]==')') b=j; |
17 | : | } |
18 | 7 : | fen=0; |
19 | 7 : | fen1=0; |
20 | 7 : | fen2=0; |
21 | 7 : | fenm=0; |
22 | 7 : | if(a==0&&b==0) { |
23 | 4 : | for(j=2; j<str[i].size(); j++) { |
24 | 2 : | fen=(str[i][j]-'0')+fen; |
25 | 2 : | fen*=10; |
26 | 2 : | if(j==str[i].size()-1) fen/=10; |
27 | : | } |
28 | 2 : | yue(fen,pow(10,str[i].size()-2)); |
29 | : | } else { |
30 | 25 : | for(j=2; j<b; j++) { |
31 | 20 : | if(j==a) continue; |
32 | 15 : | fen1=(str[i][j]-'0')+fen1; |
33 | 15 : | fen1*=10; |
34 | 15 : | if(j==b-1) fen1/=10; |
35 | : | } |
36 | 10 : | for(j=2; j<a; j++) { |
37 | 5 : | fen2=(str[i][j]-'0')+fen2; |
38 | 5 : | fen2*=10; |
39 | 5 : | if(j==a-1) fen2/=10; |
40 | : | } |
41 | 5 : | fenm=pow(10,b-3)-pow(10,a-2); |
42 | 5 : | yue(fen1-fen2,fenm); |
43 | : | } |
44 | : | } |
45 | 11 : | return 0; |
46 | : | } |
47 | 7 : | void yue(int x,int y) { |
48 | : | int i; |
49 | 102 : | for(i=2; i<=x; i++) { |
50 | 95 : | if(x%i==0&&y%i==0) { |
51 | 14 : | y/=i; |
52 | 14 : | x/=i; |
53 | 14 : | i=2; |
54 | : | } |
55 | : | } |
56 | 7 : | cout<<x<<'/'<<y<<endl; |
57 | 13 : | } |