• hdu_1717_小数化分数2


    一看此题,顿觉茫然,搜得思路,方知原来可以这样。最是累完了,错一点,就得那个望眼欲穿的改哇!

    首先须知:小数有 有限和无限之分,其中无限小数中,又分无限循环和无限不循环小数,能用分数表示的当然只有有限小数和无限循环小数。

    有限小数就简单了,无论多少只要小数点后面的 除以 10的n次方就行了,约分一下就完事了。

    对于无限循环小数分两种,这里举例说明:

    ⑴    把0.4747……化成分数。

     0.4747……×100=47.4747……  

           0.4747……×100-0.4747……=47.4747……-0.4747……            注:因为是无限小数,所以小数点后趋向于无穷远处的 相减极限为零了

                 (100-1)×0.4747……=47                                 //提取公因式0.4747         


                        即99×0.4747…… =47

                            那么  0.4747……=47/99

    (2)把0.325656……化成分数,(道理同上)

     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

    这里

    View Code
     1 #include<iostream>
     2 #include<math.h>
     3 #include<string.h>
     4 using namespace std;
     5 
     6 
     7 int gcd(int xiao,int da)
     8 {
     9     while(xiao%da)
    10     {
    11       int tmp=xiao%da;
    12       xiao=da;
    13       da=tmp;
    14     }
    15     return da;
    16 }
    17 
    18 
    19 
    20 int main()
    21 {
    22     int T;
    23     while(cin>>T){
    24     int i,a,b,cnta,cntb,max;
    25     int k,l;
    26     
    27     char ch[15];
    28     while(T--)
    29     {
    30         cin>>ch;
    31         bool flag = true;
    32         a = 0;    b = 0; cnta = 0;cntb = 0;
    33         k = 1; l = 1;
    34         for(i = 2;ch[i] != '\0'; i++)
    35         {
    36             if(ch[i] == '(')
    37             {
    38                 flag = false;
    39                 b = a;
    40                 cntb = cnta;
    41                 continue;
    42             }
    43             if(ch[i] == ')')
    44                 break;
    45             if(flag)
    46             {
    47                 a = a*10  + ch[i]-'0';
    48                 cnta++;    
    49             }
    50             else
    51             {
    52                 b = b*10 + ch[i] - '0';
    53                 cntb++;
    54             }
    55             
    56         }
    57         if(!cntb)
    58         {
    59             while(cnta--)
    60                 k *= 10;
    61             max = gcd(a,k);
    62 
    63             cout<<a/max<<'/'<<k/max<<endl;
    64         }
    65         else
    66         {
    67             while(cnta--)
    68                 k *= 10;
    69             while(cntb--)
    70                 l *= 10;
    71             max = gcd(b-a,l-k);
    72             cout<<(b-a)/max<<'/'<<(l-k)/max<<endl;
    73         }
    74     }
    75         
    76     }
    77     return 0;
    78 }
  • 相关阅读:
    J.U.C并发框架源码阅读(十五)CopyOnWriteArrayList
    J.U.C并发框架源码阅读(十四)ScheduledThreadPoolExecutor
    J.U.C并发框架源码阅读(十三)ThreadPoolExecutor
    Django基础之request对象
    Django基础之给视图加装饰器
    Django基础之初识视图
    Django基础之CBV和FBV
    Django基础之template
    Django基础之命名空间模式(include)
    Django基础之命名URL和URL反向解析
  • 原文地址:https://www.cnblogs.com/konkon/p/hdu_1717_DecimalDividedSeveral.html
Copyright © 2020-2023  润新知