无限循环小数POJ1930
題意:給定一個(gè)無限循環(huán)小數(shù),求其分?jǐn)?shù)形勢,要求分母最小
分析:看了別人的題解才做出來的,將無限循環(huán)小數(shù)轉(zhuǎn)化成分?jǐn)?shù),分為純循環(huán)和混循環(huán)兩種形式。
? ? ?(1)對于純循環(huán):用9做分母,有多少個(gè)循環(huán)數(shù)就幾個(gè)9,比如0.3,3的循環(huán)就是9分之3,0.654,654的循環(huán)就是999分之654, 0.9,9的循環(huán)就是9分之1,以此類推。
? ? ? (2)混循環(huán):用9和0做分母,首先有幾個(gè)循環(huán)節(jié)就幾個(gè)9,接著有幾個(gè)沒加入循環(huán)的數(shù)就加幾個(gè)0,再用小數(shù)點(diǎn)后面的數(shù)減 沒加入循環(huán)的數(shù),比如0.43,3的循環(huán),有一位數(shù)沒加入循環(huán),就在9后面加一個(gè)0做分母,再用43減4做分子,得 90分之39,0.145,5的循環(huán)就用9后面加2個(gè)0做分母,再用145減14做分子,得900分之131,0.549,49的循環(huán),就 用99后面加1個(gè)0做分母,用549減5做分子,最后得990分之545,以此類推,能約分的要化簡。
本題沒有說明循環(huán)節(jié)在哪一位,因此每一位進(jìn)行枚舉,取分母最小的就是所求 ,注意學(xué)會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()); //小數(shù)點(diǎn)后面的數(shù) 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?
轉(zhuǎn)載于:https://www.cnblogs.com/wolf940509/p/5792439.html
總結(jié)
以上是生活随笔為你收集整理的无限循环小数POJ1930的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: anjularjs 路由
- 下一篇: 13.SpringMVC和Spring集