HDOJ1717 小数化分数2
来源:互联网 发布:知合控股有限公司 编辑:程序博客网 时间:2024/05/17 02:16
小数化分数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
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)的小数形式)。
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;}
原文
1 0
- HDOJ1717 小数化分数2
- HDOJ1717 小数化分数2(模拟)
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- 小数化分数2
- hdu1717 小数化分数2
- HDU 小数化分数2
- HDU1717 小数化分数2
- HD-小数化分数2
- HDU1717--小数化分数2
- hdu1717 小数化分数2
- hdu1717小数化分数2
- Leetcode: Contains Duplicate
- python中的set操作
- 开始更新自己的博客了,新的开始
- Linux命令之磁盘维护篇
- hdu 1075 What Are You Talking About(Trie树)
- HDOJ1717 小数化分数2
- Java中equals和==的区别
- 最大报销额
- Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
- !HDU 4283 屌丝联谊会-区间dp
- js获取select标签选中的值
- OC语言类的深入和分类
- Linux下基于TCP的Socket编程
- 【剑指Offer面试题】 九度OJ1388:跳台阶