zoukankan      html  css  js  c++  java
  • 小数化分数~-~

    小数化分数,嗯。

    看到这题,多思考。。(careful consideration;deliberate;thoughtful

    普通小数就不用说了吧, 有几位除以1后带几位零的数。

    循环真是怎么办好呢,好多呢,算不出来吧,我也不会。那就删了好了。

    怎么删呢?

    copy:case

    ⑴    把0.4747……和0.33……化成分数。

    想1:        0.4747……×100=47.4747……  

    0.4747……×100-0.4747……=47.4747……-0.4747……

    (100-1)×0.4747……=47

    即99×0.4747…… =47

    那么  0.4747……=47/99



    想2: 0.33……×10=3.33……

    0.33……×10-0.33……=3.33…-0.33……

    (10-1) ×0.33……=3

    即9×0.33……=3

    那么0.33……=3/9=1/3

    由此可见, 纯循环小数化分数,它的小数部分可以写成这样的分数:纯循环小数的循环节最少位数是几,分母就是由几个9组成的数;分子是纯循环小数中一个循环节组成的数。

    ⑵把0.4777……和0.325656……化成分数。

    想1:0.4777……×10=4.777……①

    0.4777……×100=47.77……②

    用②-①即得:

    0.4777……×90=47-4

    所以, 0.4777……=43/90



    想2:0.325656……×100=32.5656……①

    0.325656……×10000=3256.56……②

    用②-①即得:

    0.325656……×9900=3256.5656……-32.5656……

    0.325656……×9900=3256-32

    所以, 0.325656……=3224/9900

    将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同.

      将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同.

    copy not ending:

    AK 代码:

    #include<iostream>

    using namespace std;

    int f(int a, int b)
    {
        while(a%b)
        {
            int w = a % b;
            a = b;
            b = w;
        }
        return b;
    }
    int main()
    {
        int t;


        cin >> t;

        while(t--)
        {
            char str[15];
            cin >> str;
            int x= 0, y = 0, p = 0, q = 0, a = 1, b = 1, m, w = 0, d, s;
            for(int i = 2; str[i] != ''; i++)
            {
                if(!w && str[i] != '(')
                {
                    p++;
                    x *= 10;
                    x += str[i] - '0';
                }
                if(w && str[i] != ')')
                {
                    q++;
                    y *= 10;
                    y += str[i] - '0';
                }
                if(str[i] == '(')
                {
                    w = 1;
                    y = x;
                    q = p;
                }
            }
            if(!q)
            {
                while(p--)
                    a *= 10;
                m = f(x, a);
                a /= m;
                x /= m;
                cout << x << '/' << a << endl;
            }
            else
            {
                d = y-x;
                while(p--)
                    a*=10;
                while(q--)
                    b*=10;
                s = b-a;
                m = f(d, s);
                s /= m;
                d /= m;
                cout << d << '/' << s << endl;
            }
        }
        return 0;
    }

    (当然代码是自己打出来的,思路什嘛的完全完全摘自博客:

    http://blog.163.com/huangzhifei2009@126/blog/static/12376126720097316513817/

    让未来到来 让过去过去
  • 相关阅读:
    装配Bean
    百练
    东软小选拔
    俄罗斯乘法
    POJ
    ACdream
    javascript 链式作用域
    ie6/7 bug
    onreadystatechange 和 status
    瀑布流 <<转>>
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4385002.html
Copyright © 2011-2022 走看看