zoukankan      html  css  js  c++  java
  • 无限循环小数POJ1930

    题意:给定一个无限循环小数,求其分数形势,要求分母最小

    分析:看了别人的题解才做出来的,将无限循环小数转化成分数,分为纯循环和混循环两种形式。

         (1)对于纯循环:用9做分母,有多少个循环数就几个9,比如0.3,3的循环就是9分之3,0.654,654的循环就是999分之654, 0.9,9的循环就是9分之1,以此类推。

          (2)混循环:用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,以此类推,能约分的要化简。

    本题没有说明循环节在哪一位,因此每一位进行枚举,取分母最小的就是所求 ,注意学会STL中String的用法。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 string s;
    15 long long gcd(long long a,long long b)
    16 {
    17     if(b==0)   return a;
    18     return gcd(b,a%b);
    19 }
    20 int main()
    21 {
    22     while(cin>>s)
    23     {
    24         if(s=="0")  break;
    25         string digit=s.substr(2,s.length()-5);
    26         int n=digit.length();
    27         long long m=atoi(digit.c_str());  //小数点后面的数
    28         long long fmmin,fzmin;
    29         fmmin=1<<30;
    30         for(int i=1;i<=n;i++)
    31         {
    32             string cnt=digit.substr(0,n-i);
    33             long long res=m-atoi(cnt.c_str()); //分子
    34             long long ans=pow(10,n)-pow(10,n-i);  //分母
    35             long long num=gcd(res,ans);
    36             res/=num;     //最简形式
    37             ans/=num;
    38             if(fmmin>ans)
    39             {
    40                 fmmin=ans;
    41                 fzmin=res;
    42             }        
    43         }
    44         cout<<fzmin<<"/"<<fmmin<<endl;
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    Android自己定义组件系列【1】——自己定义View及ViewGroup
    LeetCode60:Permutation Sequence
    GitHub 优秀的 Android 开源项目
    view变化监听器ViewTreeObserver介绍
    android中ImageView的ScaleType属性
    Android静态图片人脸识别的完整demo(附完整源码)
    理解Android的手势识别
    Android浏览图片,点击放大至全屏效果
    Android中如何实现文件下载
    Android语音识别
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5792439.html
Copyright © 2011-2022 走看看