zoukankan      html  css  js  c++  java
  • UVa 202 Repeating Decimals

    计算循环小数的循环节

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

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

    可以用数组储存数字,模拟竖式除法来解决。

    附AC代码:

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 const int MAX=3050;
     6 
     7 int r[MAX],u[MAX],s[MAX];
     8 
     9 int main(){
    10     int n,m,t;
    11     while(cin>>n>>m){
    12         t=n;
    13         memset(r,0,sizeof(r));
    14         memset(u,0,sizeof(u));
    15         memset(s,-1,sizeof(s));
    16         int ans=0;
    17         r[ans++]=n/m;//r数组用来存储数字 
    18         n=n%m;
    19         while(!u[n]&&n){//模拟竖式除法 
    20             u[n]=ans;//u数组记录重复点位置 (即位数) 
    21             s[ans]=n;//s用来判断在哪一点重复 
    22             r[ans++]=10*n/m;
    23             n=10*n%m;
    24         }
    25         cout<<t<<"/"<<m<<" "<<"="<<" "<<r[0]<<".";
    26         for(int i=1;i<ans&&i<=50;i++){
    27             if(n&&s[i]==n)//当条件成立时即为循环开始 
    28             cout<<"(";
    29             cout<<r[i];
    30         }
    31         if(!n)//可除尽时 
    32         cout<<"(0";
    33         if(ans>50)//不要忘了大于50位要用... 
    34         cout<<"...";
    35         cout<<")"<<endl;
    36         int sum=n?(ans-u[n]):1;//总位数减循环开始的位数即为循环位数 
    37         cout<<"   "<<sum<<" = number of digits in repeating cycle"<<endl<<endl;
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    SQL中的escape 将通配符 变成普通符号
    shell 变量
    vi 常用命令
    Java 内存模型基础
    Linux 的文件权限与目录配置
    Mybatis 源码分析之事物管理
    Mybatis 源码分析之一二级缓存
    Mybatis源码分析之结果集处理
    从JDBC看Mybatis的设计
    Mybatis源码分析之插件的原理
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/5671846.html
Copyright © 2011-2022 走看看