Repeating Decimals (计算循环小数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Repeating Decimals (计算循环小数)相关的知识,希望对你有一定的参考价值。

技术分享技术分享

技术分享

 

 

//计算循环小数,并找出循环节以及循环节的长度,最后输出时若循环节大于50最后输出省略号。
//求循环小数,记录被除数,若被除数相同了则证明循环了。
//注意:即使是循环小数,但可能并不是从第一位小数开始循环
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int rm[1010];
int vis[1000010];
int rec[1000010];
int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        memset(vis,0,sizeof(vis));
        memset(rec,0,sizeof(rec));
        printf("%d/%d = %d",a,b,a/b);
        a=a%b;
        int k=1;  //k为小数点后循环整数个数 
        while(!vis[a]&&a)
        {
            vis[a]=k;   //记录被除数出现的位置
            rec[k]=a;   //记录被除数
            a=a*10;   //一直保持被除数记录为整数
            rm[k++]=a/b;  //记录小数点后的循环整数
            a=a%b;
        }
        printf(".");
        for(int i=1;i<k&&i<=50;++i)
        {
            if(a&&a==rec[i])
                printf("(");
            printf("%d",rm[i]);
        }
        if(!a)
            printf("(0");
        if(k>50)
            printf("...");
        printf(")\\n");
        printf("   %d = number of digits in repeating cycle\\n\\n",a?(k-vis[a]):1);   //注意打印空行
    }
    return 0;
}

 

以上是关于Repeating Decimals (计算循环小数)的主要内容,如果未能解决你的问题,请参考以下文章

UVA202-Repeating Decimals

循环小数(Repeating Decimals)

循环小数(Repeating Decimals)

Uva 202.Repeating Decimals

Repeating Decimals UVA - 202

UVa 202 Repeating Decimals 题解