小数化分数
【问题描述】
任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。
【输入形式】
第一行是一个整数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 : | } |

浙公网安备 33010602011771号