设为首页 加入收藏

TOP

uva 10555 - Dead Fraction)(数论)
2015-07-24 05:41:50 来源: 作者: 【 】 浏览:4
Tags:uva 10555 Dead Fraction 数论

题目链接:uva 10555 - Dead Fraction

题目大意:给出一个小数,从...开始可以是任何数字,但是保证是无限循环小数,将该小数用分式的形式表示,并且要求分母尽量大。

解题思路:这题主要是怎么将无限循环小数转换成分式,这样的:

  • 有小数0.abcdEEE,未循环部分长4,循环节为E,E的长度为i(假设)
  • abcd+E999…(i位9)10i
    #include 
         
           #include 
          
            #include 
           
             using namespace std; typedef long long ll; const int maxn = 105; const ll INF = 0x3f3f3f3f3f3f3f; char s[maxn]; ll gcd (ll a, ll b) { return b ? gcd(b, a%b) : a; } int main () { while (scanf("%s", s) == 1 && strcmp(s, "0")) { int len = strlen(s)-5; ll ansu, ansd = INF; for (int i = 0; i < len; i++) s[i] = s[i+2]; for (int i = 0; i < len; i++) { ll d = 1, u = 0; for (int j = 0; j < i; j++) { d = d * 10; u = u * 10 + s[j] - '0'; } ll x = 0, y = 0; for (int j = i; j < len; j++) { x = x * 10 + s[j] - '0'; y = y * 10 + 9; } d = d * y; u = u * y + x; ll g = gcd(d, u); u /= g; d /= g; if (d < ansd) { ansd = d; ansu = u; } } printf("%lld/%lld\n", ansu, ansd); } return 0; }
           
          
         
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 10627 - Infinite Race(数论) 下一篇POJ 1300 Door Man

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: