HDU-1717 小数转换成分数 运用GCD
2018-01-22 19:19
295 查看
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output对每一个对应的小数化成最简分数后输出,占一行。Sample Input
Sample Output
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output对每一个对应的小数化成最简分数后输出,占一行。Sample Input
3 0.(4) 0.5 0.32(692307)
Sample Output
4/9 1/2 17/52
代码如下: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int Gcd_(int x,int y) {//分子 <分母 while(x>0) { int c; c=y%x; y=x; x=c; }return y; } /*混循环小数化分数:把小数分为循环节和非循环节, 分母:循环节有几位,分母就有几个9,非循环节有几位,就在9后添几个0; 分子:(非循环节+循环节)(连着一起)-非循环节 如:0.155555……分母为90,分子为15-1=14,即14//90 */ void Get_ans(char *s) { int len=strlen(s); int a=0,b=0; int M1=0,M2=0; int flag=0;//判断是否为循环小数 for(int i = 2; i < len; i++) {//为什么要从i=2开始 因为s[0]是0 s[1]='.'; if(s[i] == '(') break;//如果有(的话退出for循环进入下一个for循环 a = a * 10 + s[i] - '0';//记录非循环节 M1++;//分母中0的个数,非循环节有几个后边就添加几个零 } for(int i = 2; i < len; i++) { if(s[i] == '(' || s[i] == ')') { flag = 1; continue; } b = b * 10 + s[i] - '0';//记录循环节+非循环节的数 M2++;//记录非循环节 循环节的总个数 } M2 -= M1;//分母中9的个数 int Num = b - a;//分子 int Den = 0;//分母 if(!flag)//当不是循环小数的时候 { Num = b; Den = 1; M2 = 0; } for(int i = 0; i < M2; i++) Den = Den * 10 + 9; for(int i = 0; i < M1; i++) Den *= 10; int Gcd = Gcd_(Num, Den); Den /= Gcd; Num /= Gcd; printf("%d/%d\n", Num, Den); return; } int main() { int t; scanf("%d",&t); while(t--) { char s[20]; scanf("%s", s); Get_ans(s); } return 0; }
相关文章推荐
- hdu 1717 小数转换为分数
- hdu 1717小数化分数2
- hdu 1717小数化分数2
- 【循环小数性质】HDU 1717——小数化分数2
- hdu 1717小数化分数2
- hdu 1717 小数化分数2 循环小数,算数论题吧. 不是很难.
- hdu 1717 小数化分数2 (循环小数转分数)
- hdu 1717 && 计蒜课 52 【分数小数的互相转化】【数论?】
- HDU 2522 & AOJ 441 & AOJ 364 关于小数和分数的转换
- hdu---1717小数化分数2
- HDU 1717 小数化分数2(循环小数化分数)
- C# 把分数转换为小数解决方案-------
- nyoj-131 小数相加 循环小时转换分数
- 分数与小数的相互转换
- 小数到分数的转换
- HDU 1717 小数化分数2(数学基本知识)
- 一种将无限循环小数快速转换为分数的方法
- HDU 1717 小数化分数2
- (hdu step 2.1.8)小数化分数2(小数化分数——包括了循环小数化分数的情况)
- HDU 小数化分数 1717