• POJ 1930 Dead Fraction


    http://poj.org/problem?id=1930

    小学奥数忘了吗

    求无限循环小数的分数方法

    //计算循环小数的公式
    /*
    用9和0做分母,首先有几个循环节就几个9,接着有几个没加入循环的数就加几个0,
    再用小数点后面的数减 没加入循环的数,比如0.43,3的循环,有一位数没加入循环,
    就在9后面加一个0做分母,再用43减4做分子,得 90分之39,0.145,5的循环就用9后
    面加2个0做分母,再用145减14做分子,得900分之131,0.549,49的循环,就 用99后
    面加1个0做分母,用549减5做分子,最后得990分之545,以此类推,能约分的要化简。
    */

    但是因为题目并没有说 循环部分是多少

    所以直接枚举不重复的部分即可   "by simplest, he means the the one with smallest denominator" 找使得最简的分母即可

    denominator --分母

    numerator --分子

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <queue>
     5 #include <algorithm>
     6 #include <math.h>
     7 #include <string>
     8 #include <fstream>
     9 #define READ() freopen("in.txt", "r", stdin);
    10 #define MAXV 2007
    11 #define MAXE 20007
    12 #define INF 9999999999
    13 using namespace std;
    14 
    15 typedef long long LL;
    16 
    17 LL pow10(int n)//10^n
    18 {
    19     LL res = 1;
    20     for (int i = 0; i < n; i++)
    21     {
    22         res *= 10;
    23     }
    24     return res;
    25 }
    26 LL gcd(LL x, LL y)
    27 {
    28     if (y == 0) return x;
    29     else return gcd(y, x%y);
    30 }
    31 //vjudge的好代码!!!
    32 int main()
    33 {
    34     READ()
    35     char str[128];
    36     LL len, num, all, i, a, b, g;
    37     while (cin >> str && strcmp(str,"0"))
    38     {
    39         LL min_a = INF, min_b = INF;
    40         for (i = 2, all = 0, len = 0; str[i] != '.'; i++ )//读取数字
    41         {
    42             all = all * 10 + str[i] - '0';
    43             len++;
    44         }
    45         for (LL j = 1; j <= len; j++)
    46         {
    47             num = all / pow10(j);//不循环的数字
    48             a = all - num;//分子
    49             b = pow10(len) - pow10(len - j);
    50             g = gcd(a, b);
    51             if (b/g < min_b)
    52             {
    53                 min_b = b/g;
    54                 min_a = a/g;
    55             }
    56         }
    57         cout << min_a << "/" << min_b << endl;
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    团队冲刺第九天
    团队冲刺第七天
    CSS 居中大全
    jquery 中fadeIn,fadeOut动画
    使用Fiddler提高前端工作效率 (实例篇)
    使用Fiddler提高前端工作效率 (介绍篇)
    python的一些学习资料(持续更新中)
    Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    setuptools,pip,install,UnicodeDecodeError: 'ascii' codec can't decode byte.原因和解决方案
    express cookie-session解惑
  • 原文地址:https://www.cnblogs.com/oscar-cnblogs/p/6435109.html
Copyright © 2020-2023  润新知