HDOJ1717 小数化分数2
2015-07-27 22:45
218 查看
小数化分数2
Time Limit:1000MS Memory Limit:32768KB 64bit
IO Format:%I64d & %I64u
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.25 * 100 = 25;0.25 = 25 / 100(约分即可得到0.25的小数表示);
2.将循环小数化成分数,方法如下:
0.32(692307) * 100 = 32.692307①;
0.32(692307) * 10 ^ 8 = 32692307.(692307)②;
② - ①得:0.32(692307)* (10 ^ 8 - 100) = 32692275;
0.32(692307) = 32692275 / (10 ^ 8 - 100)(约分即可得到0.32(692307)的小数形式)。
原文
Time Limit:1000MS Memory Limit:32768KB 64bit
IO Format:%I64d & %I64u
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.25 * 100 = 25;0.25 = 25 / 100(约分即可得到0.25的小数表示);
2.将循环小数化成分数,方法如下:
0.32(692307) * 100 = 32.692307①;
0.32(692307) * 10 ^ 8 = 32692307.(692307)②;
② - ①得:0.32(692307)* (10 ^ 8 - 100) = 32692275;
0.32(692307) = 32692275 / (10 ^ 8 - 100)(约分即可得到0.32(692307)的小数形式)。
#include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<cmath> #include<set> using namespace std; typedef long long ll; typedef vector<int> vi; typedef set<int> si; char str[50];
void gcd(int& mol,int& den) { int t,x=mol,y=den; while(x>0) { t=x; x=y%x; y=t; } mol/=y; den/=y; }
int getint(char* str,int pos) { int num=0; for(int i=2; i<=pos+1; i++) num=num*10+str[i]-48; return num; }
int main() { int n,cnt; cin>>n; while(n--) { cnt=0; cin>>str; int i=0,pos; while(str[i]!='\0'&&str[i]!='(') i++; if(str[i]=='\0') { int mol=getint(str,i-2); int den=pow(10.0,i-2); gcd(mol,den); cout<<mol<<'/'<<den<<endl; } else { int k=i-1; pos=i; while(str[k]!='\0') { k++; str[k]=str[k+1]; } while(str[i]!=')') { cnt++; i++; } str[i]='\0'; int num1=getint(str,pos+cnt-2); int num2=getint(str,pos-2); int mol=num1-num2; int den=pow(10.0,pos-2)*(pow(10.0,cnt)-1); gcd(mol,den); cout<<mol<<'/'<<den<<endl; } } return 0; }
原文
相关文章推荐
- 黑马程序员------OC 对象和类
- 移动前端调式页面--weinre
- 【Leetcode】Path sum 2
- Leetcode28 Implement strStr()
- linux 查看系统版本及硬件信息
- 第69讲:Scala并发编程react、loop代码实战详解学习笔记
- 开始更新自己的博客了,新的开始
- 第八章、bash脚本编程(中)
- 解决hibernate+mysql写入数据库乱码
- Failed to install *.apk on device 'emulator-5554': timeout
- error: failed to attach to process ID
- DESTDIR and PREFIX of make
- 实现一个android拨号联系人
- 联网状态下一条命令配置vim
- HDU 2092 整数解
- C#操作XML的方法
- String.intern()
- ViewPage 循环滑动bug
- 关于块级元素,行级元素和javascript的一些总结
- 对一个程序的思考(-1如何存储)