小数化分数

来源:互联网 发布:网站搜索优化 编辑:程序博客网 时间:2024/05/22 10:27

【问题描述】

       任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。

【输入形式】

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

【输出形式】

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

【样例输入】

30.(4)0.50.32(692307)

【样例输出】

4/91/2

17/52

 : #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 : }

原创粉丝点击