hdu1717小数化分数2
2016-07-25 14:26
357 查看
Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
3
0.(4)
0.5
0.32(692307)
Sample Output
4/9
1/2
17/52
如何把小数转化成为分数?
对于一般分数,大家都知道该怎么弄,那对于循环小数呢?我就拿题里给的例子给大家演示一下:
1、0.44444……
我们设0.(4)为x
1*x = 0.444……。。。。。。。。。。(1)
10*x = 4.444……。。。。。。。。。(2)
(2)- (1)得到 9*x = 4
所以 x = 4/9.
2、 0.32(692307)
我们设该数为x
100*x = 32.692307……。。。。。。。。(1)
10^8*x = 32692307.692307……。。。。(2)
(2)-(1) = (10^8-100)*x = 32693175
所以x = 32693175/(10^8-100) = 17/52.
总结起来,就是这样的一个步骤:
1.最开始先设这个小数为X
2.确认这个循环小数的非循环部分有几个位数(digPre)然后用X去乘以10^digPre,得到(1),例如:0.444……没有非循环的部分,所以它的非循环位数是0,所以乘以10^0即可;0.32(692307)非循环部分是32,一共有两位,所以得到(1)式的时候,它需要乘以100;
3.确认这个循环小数到第一个循环结束为止,一共有多少位数(digN),然后用X乘以10^digN,得到(2)式,例如:0.444……是4无限循环下去,到第一个循环结束只有1位,所以乘以10;0.32(692307)到第一个循环结束,即,到0.32693207结束,一共8位,所以乘以10^8得到(2)式;
4.(2)式减去(1)式,得到一个关于X的等式,即可得到X的分数表达式。
代码:
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
3
0.(4)
0.5
0.32(692307)
Sample Output
4/9
1/2
17/52
如何把小数转化成为分数?
对于一般分数,大家都知道该怎么弄,那对于循环小数呢?我就拿题里给的例子给大家演示一下:
1、0.44444……
我们设0.(4)为x
1*x = 0.444……。。。。。。。。。。(1)
10*x = 4.444……。。。。。。。。。(2)
(2)- (1)得到 9*x = 4
所以 x = 4/9.
2、 0.32(692307)
我们设该数为x
100*x = 32.692307……。。。。。。。。(1)
10^8*x = 32692307.692307……。。。。(2)
(2)-(1) = (10^8-100)*x = 32693175
所以x = 32693175/(10^8-100) = 17/52.
总结起来,就是这样的一个步骤:
1.最开始先设这个小数为X
2.确认这个循环小数的非循环部分有几个位数(digPre)然后用X去乘以10^digPre,得到(1),例如:0.444……没有非循环的部分,所以它的非循环位数是0,所以乘以10^0即可;0.32(692307)非循环部分是32,一共有两位,所以得到(1)式的时候,它需要乘以100;
3.确认这个循环小数到第一个循环结束为止,一共有多少位数(digN),然后用X乘以10^digN,得到(2)式,例如:0.444……是4无限循环下去,到第一个循环结束只有1位,所以乘以10;0.32(692307)到第一个循环结束,即,到0.32693207结束,一共8位,所以乘以10^8得到(2)式;
4.(2)式减去(1)式,得到一个关于X的等式,即可得到X的分数表达式。
代码:
#include<iostream> #include<string> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; int gcd(int a,int b) { if(0==a%b) { return b; } return gcd(b,a%b); } int main() { string d; string tmp; int digN,digPre,tmpN,tag; int caseNum; long orNumerator,orDenominator,numerator,denominator; bool isCyc; scanf("%d",&caseNum); while(caseNum--) { isCyc = false; digN = 0; digPre = 0; tmpN = 0; cin>>d; int len = d.length(); for(int i=0;i<len;i++) { if(d[i]=='(') { isCyc = true; break; } } tag = 0; for(int i=0;i<len;i++) { if(tag) { if(d[i]!='('&&d[i]!=')') { digN ++; } } if(d[i]=='.') { tag = 1; } } if(isCyc) { tag = 0; for(int i=0;i<len;i++) { if(tag) { if(d[i]=='('||(len-1)==i) { break; } else { digPre ++; } } if(d[i]=='.') { tag = 1; } } for(int i=0;i<len;i++) { if(d[i]!='('&&d[i]!=')') { tmp[tmpN] = d[i]; tmpN++; } } double decTmp = atof(tmp.c_str()); tag = 0; for(int i=0;i<len;i++) { if(tag) { if(d[i]==')') { break; } tmp[tmpN] = d[i]; tmpN ++; } if(d[i]=='(') { tag = 1; } } double dec = atof(tmp.c_str()); int num1 = (int)(decTmp*pow(10,digPre)); int num2 = (int)(dec*pow(10,digN)); orNumerator = (int)(num2-num1); orDenominator =(int)(pow(10,digN)-pow(10,digPre)); numerator = orNumerator/(gcd(orNumerator,orDenominator)); denominator = orDenominator/(gcd(orNumerator,orDenominator)); printf("%d/%d\n",numerator,denominator); } else { double dec = atof(d.c_str()); orNumerator = (int)(dec*pow(10,digN)); orDenominator = pow(10,digN); numerator = orNumerator/(gcd(orNumerator,orDenominator)); denominator = orDenominator/(gcd(orNumerator,orDenominator)); printf("%d/%d\n",numerator,denominator); } } return 0; }
相关文章推荐
- unity3d prefab asset object与prefab gameobject instace关联并保存prefab gameobject instance改动.
- hive中order by,sort by, distribute by, cluster by作用以及用法
- 计算机类学科推荐书单(虽然是转载,但自己还会不定期更新的~)
- mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)
- jsonp
- 微信图片压缩
- 数数字
- 排查Java高CPU占用原因
- Node.js REPL(交互式解释器)
- 计算几何 ( 求凸包,计算三角形面积 )——最大三角形 ( HDU 2202 )
- GoogLeNet
- 5-25 朋友圈
- MyGson自定义封装,填满谷歌提供了GSON的坑
- Android Retrofit + RxAndroid
- Android组件化和插件化开发
- delete、truncate与drop的区别
- trie树与hash表的查找速度对比
- [树状数组 逆序对] poj 2299 Ultra-QuickSort
- GDB十分钟教程
- java基础总结_07