精华内容
下载资源
问答
  • 给定两个数a、b,找出a/b的循环节,并按照指定格式输出。比如a=1、b=3,则输出0.(3),即用括号包含循环节。 解法: USCAO 2.4.5中的题 Fractions to Decimals有一个tricky的解法,用分母中2的因子个数减去分子中...

    问题:

    给定两个数a、b,找出a/b的循环节,并按照指定格式输出。比如a=1、b=3,则输出0.(3),即用括号包含循环节。

     

    解法:

    USCAO 2.4.5中的题 Fractions to Decimals
    有一个tricky的解法,用分母中2的因子个数减去分子中2的因子个数,同样用分母中5的因子个数减去分子中5的因子个数,去两者这两者个数的最大值,这个就是分数的非循环部分的长度,这样偏移后,后面就是循­环部分,直到重复。

    算法如下:


    #include 
    <iostream>

    using namespace std; 
    typedef 
    long long int64; 

    int colcount=0;

    int numBeforeRepeat(int n,int d)
    ExpandedBlockStart.gifContractedBlock.gif
    {
        
    int c2=0,c5=0;
        
    if(n==0return 1;
    ExpandedSubBlockStart.gifContractedSubBlock.gif    
    while(d%2==0){d/=2;c2++;}//dominator 中2的个数
    ExpandedSubBlockStart.gifContractedSubBlock.gif
        while(d%5==0){d/=5;c5++;}//dominator 中5的个数
    ExpandedSubBlockStart.gifContractedSubBlock.gif
        while(n%2==0){n/=2;c2--;}//can go to negative
    ExpandedSubBlockStart.gifContractedSubBlock.gif
        while(n%5==0){n/=5;c5--;}//can go to negative
    ExpandedSubBlockStart.gifContractedSubBlock.gif
        if(c2>c5) {
            
    if(c2>0return c2;
            
    else return 0;
    ExpandedSubBlockStart.gifContractedSubBlock.gif    }
     else {
            
    if(c5>0return c5;
            
    else return 0;
        }

    }


    void print(char c)
    ExpandedBlockStart.gifContractedBlock.gif
    {
    ExpandedSubBlockStart.gifContractedSubBlock.gif    
    if(colcount==76{
            cout
    <<endl;
            colcount
    =0;
        }

        cout
    <<c;
        colcount
    ++;
    }


    void print(int n)
    ExpandedBlockStart.gifContractedBlock.gif
    {
        
    if(n>=10) print(n/10);
        print((
    char)('0'+(n%10)));
    }
     

    int main()
    ExpandedBlockStart.gifContractedBlock.gif
    {
        
    int n,d;
        cin
    >>n>>d;
        print(n
    /d);
        print(
    '.');
        n
    =n%d;
        
    int m=numBeforeRepeat(n,d);
    ExpandedSubBlockStart.gifContractedSubBlock.gif    
    for(int i=0;i<m;i++{
            n
    *=10;
            print(n
    /d);
            n
    %=d;
        }

        
    int r=n;
    ExpandedSubBlockStart.gifContractedSubBlock.gif    
    if(r!=0{
            print(
    '(');
    ExpandedSubBlockStart.gifContractedSubBlock.gif        
    do {
                n
    *=10;
                print(n
    /d);
                n
    %=d;
            }
     while(n!=r);
            print(
    ')');
        }

        cout
    <<endl;
        
    return 0;
    }

     

     

    转载于:https://www.cnblogs.com/clive/archive/2009/10/28/Circular_decimal_fraction_USCAO_2_4_5.html

    展开全文
  • 循环小数化分数口诀2019-11-25 14:23:32文/颜雨循环小数化分数口诀:将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同。纯循环小数化为分数:将纯...

    循环小数化分数口诀2019-11-25 14:23:32文/颜雨

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

    纯循环小数化为分数:将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同。例如:0.111...=1/9、0.12341234...=1234/9999

    混循环小数化为分数:将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同。例如:0.1234234234…=(1234-1)/9990

    0.55889888988898...=(558898-55)/999900。

    两个整数相除,如果得不到整数商,会有两种情况:一种,得到有限小数;另一种,得到无限小数。从小数点后某一位开始依次不断地重复出现前一个或一节数字的十进制无限小数,叫做循环小数,其中依次循环不断重复出现的数字叫循环节。

    展开全文
  • 1930循环小数化分数

    2019-10-22 13:28:26
    一,纯循环小数化分数循环节的数字除以循环节的位数个9组成的整数。例如: 0.3333……=3/9=1/3; 0.285714285714……=285714/999999=2/7. 二,混循环小数:(例如:0.24333333……)不循环部分和循环节构成的的数...
    /*思路:要用到数论,一开始也不懂,贴在这里吧
    一,纯循环小数化分数:循环节的数字除以循环节的位数个9组成的整数。例如:
    0.3333……=3/9=1/3;
    0.285714285714……=285714/999999=2/7.
    二,混循环小数:(例如:0.24333333……)不循环部分和循环节构成的的数减去不循环部分的差,再除以循环节位数个9添上不循环部分的位数个0。例如:
    0.24333333…………=(243-24)/900=73/300
    0.9545454…………=(954-9)/990=945/990=21/22
    
    注意到题目中说的循环节是可以选定的,要求分母最小,那么可以从最后一位开始枚举,找到分母最小的即可
    */
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    
    int gcd(int a,int b){
        if(a==0)return b;
        return gcd(b%a,a);
    }
    
    int main(){
        char str[200];
        int num,k,all,a,b,i,j,mina,minb,l;
        while(cin>>str&&strcmp(str,"0")){
        mina = minb = 1e9;
    
            for(i=2,all=0,l=0;str[i]!='.';i++){
                all = all*10+str[i]-48;
                l++;
            }
    
            for(num=all,k=1,i=1;i<=l;i++){
                num/=10;
                k*=10;
                a = all-num;
                b = (int)pow(10.0,l-i)*(k-1);
                j = gcd(a,b);
                if(b/j<minb){//选定分母最小的结果
                    mina = a/j;minb = b/j;
                }
    
            }
            cout<<mina<<'/'<<minb<<endl;
        }
        return 0;
    }
    

     

    展开全文
  • 循环小数化分数

    千次阅读 2018-06-10 11:53:31
    1表示小数点后1位到小数结束为循环节   #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; ll Pow(ll a, ll b){ ll s = 1; while (b &gt; 0) { if...

    自己写了个代码,不知道对不对

    输入格式 2.33333 1

    1表示小数点后1位到小数结束为循环节

     

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll Pow(ll a, ll b){
        ll s = 1;
        while (b > 0)
        {
            if (b % 2 == 1)
                s = s * a;
            a = a * a;
            b = b >> 1;
        }
        return s;
    }
    char a[100];
    int main()
    {
        ll x,p;
        scanf("%lld%s%lld",&x,a,&p);
    
        ll d=Pow(10,strlen(a)-p)-1;
    
        d=d*Pow(10,p-1);
    
        ll c = 0;
        for(ll i=p;i<strlen(a);i++)
            c=c*10+a[i]-'0';
    
        //printf("%lld/%lld\n",c,d);
    
        ll gcd = __gcd(c,d);
    
        c/=gcd,d/=gcd;
    
        //printf("%lld/%lld\n",c,d);
    
        //printf("%.9lf\n",(double)c/d);
    
        c+=d*x;
    
        gcd = __gcd(c,d);
        c/=gcd,d/=gcd;
    
        ll e=0,f=Pow(10,p-1);
        for(ll i=1;i<p;i++)
            e=e*10+a[i]-'0';
        if(!e)
        {
            printf("%lld/%lld\n",c,d);
            //printf("%.9lf\n",(double)c/d);
        }
        else
        {
            c = c*f+e*d;
            d = d*f;
            gcd = __gcd(c,d);
            c/=gcd,d/=gcd;
            printf("%lld/%lld\n",c,d);
            //printf("%.9lf\n",(double)c/d);
        }
    
        return 0;
    }
    

     

    展开全文
  • 输入两个数字m,n,输出m/n的结果,并找出循环节 0,n<=10000
  • 循环小数分为混循环小数、纯...无限循环小数,先找其循环节(即循环的那几位数字),然后将其展开为一等比数列、求出前n项和、取极限、化简。 例如:0.333333…… 循环节为3 则0.33333.....=3*10^(-1)+3*10^(-2)+...
  • 对于一个分数(不一定是最简形式),给出它的小树形式,如果小数有循环节的话,把循环节放在一对圆括号中. 例如,1/4 =0.25,1/3=0.3333写成0.(3),1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,...
  • POJ -1930 Dead Fraction(GCD+循环小数化分数) 题意: 给你一个循环小数,小数后有一部分省略,求小数转换为分数后的分母最小的分数。 题解: 1.首先枚举循环节长的a(0 &lt; a &lt;= len-5) ,len =...
  • 对于一个分数(不一定是最简形式),给出它的小树形式,如果小数有循环节的话,把循环节放在一对圆括号中. 例如,1/4 =0.25,1/3=0.3333写成0.(3),1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,则...
  • 题目大意:赶论文:论文里无限循环小数...然后枚举循环节找出最小分母就行。 纯循环小数 用9做分母,有多少个循环数就几个9,比如0.3,3的循环就是9分之3,0.654,654的循环就是999分之654, 0.9,9的循环就是9分之9
  • 题目链接:USACO - Fractions to Decimals之前做过小数化分数的题: 这次是分数 a/ba/b 化小数。 首先我们可以处理出整数部分 a/ba/b 。 考虑到小学算除法的方法“长除法”。我们可以发现,当算到某一步时,这个...
  • 表示还没理解过程,先贴个模版吧,套用在十进制下的求分数化小数的循环节答案不对。 #include <iostream> #include<cstdio> using namespace std; int gcd(int a,int b) { return b?gcd(b,a%...
  • 传送门:POJ2429 题意:给出一个无限不循环小数...具体实现过程就是循环节有多长就在分母上添几个9,非循环小数部分多长就在分母最后添几个0,分子按上面公式计算一下就行。 代码: #include #include #include #includ
  • 将无限循环小数化成分数

    千次阅读 2015-03-12 16:48:25
    一、纯循环小数化分数 从小数点后面第一位就循环的小数叫做纯循环小数。怎样把它化为分数呢?看下面例题。 把纯循环小数化分数: 纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,...
  • 题目链接 HDU 1717 小数化分数2. 题目: 分析: 其实就是对循环小数进行处理 我将括号作为分界线,如图示: 然后分三种情况: 没有循环小数 == 只有左值== 循环小数直接在小数点后边 == 只有右值== 循环小数与...
  • 例1把纯循环小数化分数:从以上例题可以看出,纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各位上的数都是9。9的个数与循环节的位数相同。能约分的要约分。二、混循环小数化分数 ...
  • UVA - 202 (分数 无限循环小数) 题意:紫书p59。输入a,b(0<=a<=3000,0<=b<=3000),输出a/b的循环小数以及循环节长度。例如a=5,b=43,小数表示为 5/43 = 0.(116279069767441860465) ,...
  • 小数化分数

    2021-01-08 15:01:33
    【问题描述】 任何小数都能表示成分数的形式,对于給定的小数,编写程序其化为最简分数输出,小数包括简单小数和循环小数。 【输入形式】 第一行是一个整数N,表示有多少组数据。...用9和0做分母,首先有一个循环节
  • 小数的循环节看成是3053来告诉你个将无限循环小数化分数的通用方法:设这个数的小数部分为a,这个小数表示成3+aa=0.30533053.......10000a=3053.30533053......10000a-a=30539999a=3053a=3053/9999算到这里后,能约...
  • hdu 1717 小数化分数2

    2013-09-09 16:49:23
    纯循环小数化分数,分子就是一个循环节的数字所组成的数,分母的各位数字都是9,9的个数等于一个循环节数字的个数,能约分的要约分。  例1: 把0.7化成分数。  0.7×10=7.777……① 0.7=0.777……② ...
  • 题意:给一个小数,循环节未知,要求...题解:无线循环小数转化分数,参见:无限循环小数化分数。枚举循环节。 代码: #include #include #include #include #include using namespace std; const int INF=0x3f3f3f
  • 小数化分数 模拟题

    千次阅读 2018-09-26 22:11:39
    小数化分数 Problem Description 将给出的小数化为分数 Input 只有一行,为要转换的小数(正负均有)。 注意:小数的格式有好几种。为了方便起见,循环部分均被括号括起来了。 有前导0或后导0的例子:09.400(输出...
  • HDU1717+小数化分数

    2013-02-20 21:43:00
    题意:小数化分数 有限小数:小数点后面有几位就乘以 10^n 最后 分子则为乘积,分母则为1*10^n (记得约分) 混无限循环小数: 循环节+非循环节(’+‘表示连接起来)-非循环节=分子 分母:循环节有几位(从左往...
  • 2、循环小数化为分数的方法:要求循环节必须从小数后第一位开始,如果满足这个条件,就是先找到循环节位数,如果有n位,分母就是n个9,然后对分子分母求最大公约数GCD进行约分,得到最简分数。如果不满足这个条件,...
  • 分数化小数

    2017-01-03 16:46:10
    数据处理是程序设计的...接受一个N/D形式的分数,其中正整数N分子,正整数D为分母(约定N,D),输出它的小数形式,如果它的小数形式存在循环节,要将其用括号括起来,并计算输出循环节的位数;例如: 1/3=.(3) ; 3/8
  • 分数形式: (非循环部分&循环部分)/( (10^(循环节位数)-1)^(非循环节位数) ) 例: 0.32(692307) 32692307 / 99999900 = 17/52 注意的输入:0.00(1) */ #include #include #include #include #include...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

循环节化分数