码迷,mamicode.com
首页 > 其他好文 > 详细

Dead Fraction [POJ1930]

时间:2018-06-29 21:40:19      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:IV   分数   pow   最小   mat   get   技术分享   有意思   printf   

题意:

很有意思的一道题,,将一个无限循环小数转化成分母最小的精确分数值....,循环的部分不一定是最后一位。

Sample Input
0.2...
0.20...
0.474612399...
0
Sample Output
2/9
1/5
1186531/2500000
技术分享图片
技术分享图片
 1 #include<set>
 2 #include<map>
 3 #include<queue>
 4 #include<stack>
 5 #include<cmath>
 6 #include<cstdio>
 7 #include<cstring>
 8 #include<iostream>
 9 #include<algorithm>
10 #define RG register int
11 #define rep(i,a,b)    for(RG i=a;i<=b;++i)
12 #define per(i,a,b)    for(RG i=a;i>=b;--i)
13 #define ll long long
14 #define inf (1ll<<60)
15 using namespace std;
16 ll n,mx,mn,len;
17 char s[20];
18 inline int read()
19 {
20     int x=0,f=1;char c=getchar();
21     while(c<0||c>9){if(c==-)f=-1;c=getchar();}
22     while(c>=0&&c<=9){x=x*10+c-0;c=getchar();}
23     return x*f;
24 }
25 
26 ll gcd(ll a,ll b){    return (a%b==0)?b:gcd(b,a%b);}
27 
28 void work()
29 {
30     rep(i,2,len+1)
31     {
32         ll A=n,B=0,C=i-2;ll K=len-C;
33         rep(j,2,i-1)    B=B*10+s[j]-0;
34         ll X=A-B,Y=pow(10,C)*(pow(10,K)-1ll);
35         ll g=gcd(X,Y);
36         if(Y/g<mn)    mx=X/g,mn=Y/g;
37     }
38     printf("%lld/%lld\n",mx,mn);
39 }
40 
41 int main()
42 {
43     while(1)
44     {
45         scanf("%s",s);n=len=0,mn=inf;
46         if(strlen(s)==1)    break;
47         for(RG i=2;;i++)
48         {
49             if(s[i]==.) break;
50             n=n*10+s[i]-0,len++;
51         }
52         work();
53     }
54     return 0;
55 }
View Code

 

Dead Fraction [POJ1930]

标签:IV   分数   pow   最小   mat   get   技术分享   有意思   printf   

原文地址:https://www.cnblogs.com/ibilllee/p/9245389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!