Dead Fraction [POJ1930]

Posted ibilllee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dead Fraction [POJ1930]相关的知识,希望对你有一定的参考价值。

题意:

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

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
",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]的主要内容,如果未能解决你的问题,请参考以下文章

Dead Fraction [POJ1930]

POJ 1930 Dead Fraction

POJ1930

UVA 10555 - Dead Fraction(数论+无限循环小数)

[POJ1980]Unit Fraction Partition(搜索)

Unused Method(不再使用的方法)——Dead Code(死亡代码)