小数化分数2

小数化分数2

Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 50   Accepted Submission(s) : 26
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
 

 

Source
2007省赛集训队练习赛(2)
 
 1 #include<stdio.h>
 2 int fun(int a,int b)
 3 {
 4      while(a>b?(a%=b):(b%=a));
 5      return a+b;
 6 }
 7 int main()
 8 {
 9      int T,n,i,j,k,l,x,y,sign1,sign2;
10      char num[30];
11      scanf("%d",&T);
12      while(T--)
13      {
14           scanf("%s",num);
15           j=sign1=sign2=x=y=0;
16           k=l=1;
17           for(i=2;num[i]!='\0';i++)
18           {
19                if(j==0&&num[i]!='(')
20                {
21                     sign1++;
22                     x*=10;
23                     x+=num[i]-'0';
24                }
25                if(j==1&&num[i]!=')')
26                {
27                     sign2++;
28                     y*=10;
29                     y+=num[i]-'0';
30                }
31                if(num[i]=='(')
32                {
33                     j=1;
34                     sign2=sign1;
35                     y=x;
36                }
37           }
38           if(sign2==0)
39           {
40            while(sign1--)
41                 k*=10;
42             n=fun(x,k);
43             x/=n;
44             k/=n;
45             printf("%d/%d\n",x,k);
46           }
47           else
48           {
49                 x=y-x;
50            while(sign1--)
51                 k*=10;
52            while(sign2--)
53                 l*=10;
54            k=l-k;
55            n=fun(x,k);
56            x/=n;
57            k/=n;
58            printf("%d/%d\n",x,k);
59           }
60      }
61      return 0;
62 }
View Code

 

posted @ 2014-05-24 19:51  Wurq  阅读(261)  评论(0编辑  收藏  举报