3 0.(4) 0.5 0.32(692307)
4/9 1/2 17/52
该题为中文题,而且题目讲得很直白,无非就是让我们将无限循环小数或有限小数转化成分数,故题意不再多讲
至于如何做到小数与分数地转化呢,不妨稍微来学习一下
首先无限循环小数0.333…可以表示成
它的分数形式是1/3,这个想必大家都是清楚的,那是如何转化的呢?
②-①,可得
再举一个例子,说不定你就会有所发现
比如无限循环小数0.131313…,按照上述方式,可以得到
若不再是纯小数的话,我们要怎么办呢
比如说无线循环小数0.2777777…,分为不循环部分0.2与循环部分0.077777…
这样的话我们只需做点处理就可以
具体的可以去看看循环小数化分数的一些数学知识,留下链接以供学习
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 20; const int inf = 1000000000; const int mod = 1000000007; int gcd(int x,int y) { while(x!=y) if(x>y) x-=y; else y-=x; return x; } char s[N]; int main() { int t,i,a,b,c,d; bool flag; scanf("%d",&t); while(t--) { flag=false;b=a=c=0,d=1; scanf("%s",s); for(i=2;s[i]!='\0';i++) if(s[i]=='(') flag=true; else if(flag&&s[i]!=')') { a=a*10+s[i]-'0'; b=b*10+9; } else if(!flag) { c=c*10+s[i]-'0'; d*=10; } if(!a) { i=gcd(c,d); printf("%d/%d\n",c/i,d/i); } else { c=a+c*b; d=d*b; i=gcd(c,d); printf("%d/%d\n",c/i,d/i); } } return 0; }菜鸟成长记