hdu 1717 小数化分数2 循环小数,算数论题吧. 不是很难.
2014-07-14 21:20
351 查看
小数化分数2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2957 Accepted Submission(s): 1199
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
#include<stdio.h> #include<string.h> int gcd(int b,int a) { int t; while(b!=0) { t=a; a=b; b=t%b; } return a; } int main() { int T; char data[100]; int num1,num2,i,len,ten1,ten2,n1,n2,t1,t2,yue; scanf("%d",&T); while(T--) { scanf("%s",data); len=strlen(data); num1=0;//非循环 num2=0;//循环 n1=0;//非循环部分位数 n2=0;//循环部分位数 ten1=1; ten2=1; for(i=1;i<len;i++) { if(data[i-1]=='.')//非循环部分 { while(data[i]>='0'&&data[i]<='9'&&i<len) { num1*=10; num1+=data[i]-'0'; i++; n1++; } } if(data[i-1]=='(')//循环部分 { while(data[i]>='0'&&data[i]<='9'&&i<len) { num2*=10; num2+=data[i]-'0'; i++; n2++; } } } while(n1--) ten1*=10; while(n2--) ten2*=10;//(ten1*ten2)*x-n1*x=num1*ten2+num2-num1//公式 t1=num1*ten2+num2-num1; t2=ten1*ten2-ten1; if(num2==0)//如果没有循环部分 { yue=gcd(num1,ten1); printf("%d/%d\n",num1/yue,ten1/yue); } else { yue=gcd(t1,t2); printf("%d/%d\n",t1/yue,t2/yue); } } return 0; }
相关文章推荐
- hdu 1717 小数化分数2 (循环小数转分数)
- 【循环小数性质】HDU 1717——小数化分数2
- hdu 1717 小数化分数2 (数论)
- hdu 1717 && 计蒜课 52 【分数小数的互相转化】【数论?】
- HDU 1717 小数化分数2 数学题
- 【HDU】1717 小数化分数2 ——计数原理
- HDU-1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717 --小数化分数2
- HDU 1717 小数化分数2
- HDU 1717 小数化分数2
- hdu 1717小数化分数2
- Hdu 1717 小数化分数2
- 杭电hdu1717 - 小数化分数2
- hdu 1717 小数化分数2
- HDU 1717 - 小数化分数2
- HDU 1717 小数化分数
- hdu 1717 小数化分数2
- hdu 1717 小数化分数2
- hdu 1717小数化分数2