首页 > 其他 > 详细

Repeating Decimals (计算循环小数)

时间:2017-11-06 21:53:53      阅读:216      评论:0      收藏:0      [点我收藏+]

技术分享技术分享

技术分享

 

 

//计算循环小数,并找出循环节以及循环节的长度,最后输出时若循环节大于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 (计算循环小数)

原文:http://www.cnblogs.com/linxiaojie517/p/7795343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!