zoukankan      html  css  js  c++  java
  • 循环小数 UVa202

    输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度。

    例如,a=5,b=43,小数表示为0.(116279069767441860465),循环字节长度为21

    这个题,忘了怎样使a/b的结果保留多位小数!!!

    具体方法为计算得出其多位小数(位数要足够大),再判断其周期,周期不会超过分母就在小于范围内的周期一个一个判断即可。

    注意,该题循环不一定是从小数点后一位数开始,可能从之后才开始循环

    应该想到竖式,那就是求小数点后n位的方法!  a/b求出整数位,接着(a%b)*10/b即为小数点后一位,下一位a=a%b继续上一步骤可得

    写吐了

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    using namespace std;
    int p[3000];
    int main()
    {
        int a,b;
        while(scanf("%d %d",&a,&b)==2&&b){
            int t=a%b,k=0,c,x;
            x=floor((double)a/b);
            printf("%d/%d=%d.",a,b,x);
            memset(p,0,sizeof(p));
            for(int i=0;i<3000;i++){       //计算小数点后3000位小数
                t*=10;
                p[i]=t/b;
                t%=b;
            }
            while(1){             //循环是从第k位开始
                bool flag;
                for (c=1;c<=b;c++){     //周期c是大于0且小于等于b的人一个数
                    flag=true;
                    for (int j= 0;j<3000-k;j++)
                        if(p[j+k]!=p[j%c+k]){     //j%c+k为第一个周期
                            flag=false;
                            break;
                        }
                    if(flag)break;
                        //cout<<c<<" *"<<k<<endl;
                }
                if(flag){
                    for(int j=0;j<k;j++)printf("%d",p[j]);
                    printf("(");
                    if (c<= 50)for(int j=k;j<c+k;j++)printf("%d",p[j]);
                    else{
                    for(int j=k;j<k+50;j++)printf("%d",p[j]);
                    printf("...");
                    }
                    printf(")
    ");
                    printf("   %d = number of digits in repeating cycle
    
    ",c);
                    break;
                }
                k++;
            }
        }
        //system("pause");
        return 0;
    }
  • 相关阅读:
    mysql多表关系
    mysql支持的数据类型
    数据库基本操作
    线程基础
    生产者和消费者模型
    并发编程一
    元类
    linux 关机/重启命令
    linux前后台任务切换
    centos7最小化安装后,yum安装pstree及mlocate
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/5270844.html
Copyright © 2011-2022 走看看