首页 > 编程知识 正文

小数化分数怎么化,小数化分数怎么化五年级

时间:2023-05-03 13:32:15 阅读:224662 作者:661

【问题描述】
任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。
【输入形式】
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
【输出形式】
对每一个对应的小数化成最简分数后输出,占一行
【样例输入】
3
0.(4)
0.5
0.32(692307)
【样例输出】
4/9
1/2
17/52

【解题思路】

【示例代码】

#include<iostream>#include<cstring>#include<cmath>using namespace std;int zdgyz(int,int);int main(){ int n; cin>>n; string str[n]; for(int i=0;i<n;i++) { cin>>str[i]; } for(int t=0;t<n;t++) { char a[15]; strcpy(a,str[t].c_str()); int l=0; l=strlen(a); int s1=0,s2=0; int b[9]={0}; int c[9]={0}; for(int i=2;i<l;i++) { if(a[i]!='(') {b[s1]=a[i]-48;s1++;} else {break;} } for(int j=2;j<l;j++) { if(a[j]=='(') { for(int k=j+1;k<l;k++) { if(a[k]!=')') {c[s2]=a[k]-48;s2++;} else {break;} } } } int x=1; double z=0; z=pow(10.0,s1); for(int i=0;i<s2;i++) { if(i==0) {x=9;} else {x=x*10+9;} } x=x*z; int p=0,q=0,o=0; for(int j=0;j<s1;j++) { p=p*10+b[j]; } for(int k=0;k<s2;k++) { q=q*10+c[k]; } if(s2==0) {o=p;} else {o=p*pow(10.0,s2)+q-p;} int m=0,e=0,f=0; m=zdgyz(x,o); e=x/m; f=o/m; cout<<f<<"/"<<e<<endl; } return 0;}int zdgyz(int p,int q){ int o=0,f=0; p>q?o=q:o=p; for(int i=o;;i--) { if(p%i==0&&q%i==0) {f=i;break;} } return f;}

若有更优方法,欢迎交流学习!

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