HDOJ 题目1717 小数化分数2(数学)
2014-07-29 10:04
211 查看
[align=center][/align] |
小数化分数2Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2971 Accepted Submission(s): 1213 [align=left]Problem Description[/align] Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。 [align=left] [/align] [align=left]Input[/align] 第一行是一个整数N,表示有多少组数据。 每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 [align=left] [/align] [align=left]Output[/align] [align=left]对每一个对应的小数化成最简分数后输出,占一行。[/align] [align=left] [/align] [align=left]Sample Input[/align] 3 0.(4) 0.5 0.32(692307) [align=left] [/align] [align=left]Sample Output[/align] 4/9 1/2 17/52 [align=left] [/align] [align=left]Source[/align] 2007省赛集训队练习赛(2) [align=left]题目大意:将一个小数化成最简分数的形式,括号里边的是循环的部分;[/align] 分析:把0.4747……和0.33……化成分数。 想1: 0.4747……×100=47.4747…… 0.4747……×100-0.4747……=47.4747……-0.4747…… (100-1)×0.4747……=47 即99×0.4747…… =47 那么 0.4747……=47/99 想2: 0.33……×10=3.33…… 0.33……×10-0.33……=3.33…-0.33…… (10-1) ×0.33……=3 即9×0.33……=3 那么0.33……=3/9=1/3 由此可见, 纯循环小数化分数,它的小数部分可以写成这样的分数:纯循环小数的循环节最少位数是几,分母就是由几个9组成的数;分子是纯循环小数中一个循环节组成的数。 ⑵把0.4777……和0.325656……化成分数。 想1:0.4777……×10=4.777……① 0.4777……×100=47.77……② 用②-①即得: 0.4777……×90=47-4 所以, 0.4777……=43/90 想2:0.325656……×100=32.5656……① 0.325656……×10000=3256.56……② 用②-①即得: 0.325656……×9900=3256.5656……-32.5656…… 0.325656……×9900=3256-32 所以, 0.325656……=3224/9900 将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同. 将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同. [align=left]做题时间:2014年7月29号10:12[/align] ac代码 #include<stdio.h> #include<string.h> int gcd(int a,int b) { int t; if(a<b) { t=a; a=b; b=t; } if(b==0) return a; else return gcd(b,a%b); } int main() { int t; scanf("%d",&t); //getchar(); while(t--) { char s[10000]; int len,i,j,x=0,y=0,l=1,k=1,p=0,q=0,m,n,tc=0; getchar(); scanf("%s",s); len=strlen(s); for(i=2;i<len;i++) { if(!tc&&s[i]!='(') { p++; x*=10; x+=s[i]-'0'; } if(tc&&s[i]!=')') { q++; y*=10; y+=s[i]-'0'; } if(s[i]=='(') { tc=1; y=x;//很经典啊 q=p; } } if(!q) { while(p--) k*=10; m=gcd(x,k); printf("%d/%d\n",x/gcd(x,k),k/gcd(x,k)); } else { m=y-x; while(p--) k*=10; while(q--) l*=10;//总位数,l-k,就可以保证k位0,(l-k)位9 n=l-k; printf("%d/%d\n",m/gcd(m,n),n/gcd(m,n)); } } } |
相关文章推荐
- hdu 1717 小数化分数2(数学)
- hdu 1717 小数化分数2 (数学)
- HDOJ 1717 小数化分数2
- HDOJ1717 小数化分数2
- HDU 1717 小数化分数2(数学)
- HDU 1717 小数化分数2(数学基本知识)
- 【HDOJ】1717 小数化分数2
- hdu 1717 小数化分数2(数学)
- HDU 1717 小数化分数2【数学】
- hdoj 1717 小数化分数2【水】
- HDU ACM 1717 小数化分数2 [数学题]
- HDOJ1717 小数化分数2(模拟)
- HDU 1717 小数化分数2 数学题
- hdu 1717 小数化分数2 (数论)
- 杭电-1717-杭电-1717-小数化分数2
- HDOJ 题目4651Partition(数学,五边形数定理)
- HDOJ题目2502月之数(数学,递推)
- HDOJ 题目4549 M斐波那契数列(数学,矩阵快速幂,费马小定理)
- HDU-1717 小数化分数2
- hdu 1717 小数化分数2