首页 > 编程知识 正文

小数化分数计算器,小数化分数的口诀表

时间:2023-05-05 07:39:56 阅读:224621 作者:3999

题目

【问题描述】

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

【输入形式】

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

【输出形式】

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

【样例输入】

3
0.(4)
0.5
0.32(692307)
【样例输出】

4/9
1/2
17/52

http://www.360doc.com/content/18/1210/10/32901809_800612817.shtml

代码 #include<iostream>#include<string>using namespace std;int gcd(int a, int b){ if (a<b) {int temp=a;a=b;;b=temp;} return b == 0 ? a : gcd(b, a % b);}int main(){int n;cin>>n;for(int pass=0;pass<n;pass++){string s;cin>>s;s=s.substr(2);int x=s.find("(");int y=s.find(")");int l=s.length(),lx=y-x-1;int fz=0,fm=0;if(x==-1){for(int i=l-1,N=1;i>=0;i--,N*=10)fz+=(s[i]-'0')*N;fm=1;for(int i=1;i<=l;i++)fm*=10;int g=gcd(fz,fm);fz=fz/g;fm=fm/g;cout<<fz<<"/"<<fm<<endl;}else if(x==0){for(int i=lx,N=1;i>0;i--,N*=10)fz+=(s[i]-'0')*N;for(int i=1,N=1;i<=l-2;i++,N*=10)fm+=9*N;int g=gcd(fz,fm);fz=fz/g;fm=fm/g;cout<<fz<<"/"<<fm<<endl;}else{for(int i=y-1,N=1;i>=0;i--,N*=10){if(i==x){N/=10;continue;}fz+=(s[i]-'0')*N;}for(int i=x-1,N=1;i>=0;i--,N*=10)fz-=(s[i]-'0')*N;for(int i=1,N=1;i<=lx;i++,N*=10)fm+=9*N;for(int i=1;i<=x;i++)fm*=10;int g=gcd(fz,fm);fz/=g;fm/=g;cout<<fz<<"/"<<fm<<endl;}}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。