码迷,mamicode.com
首页 > 其他好文 > 详细

Repeating Decimals (计算循环小数)

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

标签:长度   main   scan   ges   turn   can   a*   namespace   com   

技术分享技术分享

技术分享

 

 

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

标签:长度   main   scan   ges   turn   can   a*   namespace   com   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!