zoukankan      html  css  js  c++  java
  • 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(")
    ");
            printf("   %d = number of digits in repeating cycle
    
    ",a?(k-vis[a]):1);   //注意打印空行
        }
        return 0;
    }
  • 相关阅读:
    c++中的 三/五原则
    3. 无重复字符的最长子串
    c++中的单例模式
    bfs 以及 dfs 常用解题思路
    经济学的三个问题
    gtihub 上一些值得学习的项目
    994. 腐烂的橘子
    96. 不同的二叉搜索树
    some idea
    Libco协程库
  • 原文地址:https://www.cnblogs.com/linxiaojie517/p/7795343.html
Copyright © 2011-2022 走看看