• USACO training 2.4.5 Fractions to Decimals题解


    嗯...用到一个定理,对于一个最简分数n/d,d=(2^x)*(5^y)*m,m≠1,那么其循环节长度为使10^L mod m==1的最小的L,不循环长度为max(x,y)

    然后这题就没什么了。。

    76个字符一换行比较坑,我用了stringstream...

     1 #include<iostream>
     2 #include<sstream>
     3 #include<cstdio>
     4 #include<iomanip>
     5 #include<algorithm>
     6 #include<string>
     7 using namespace std;
     8 typedef long long LL;
     9 string s;
    10 int pow_mod(int a,int b,int mod)
    11 {
    12     LL base=a,ans=1;
    13     while(b)
    14     {
    15         if(b&1) ans=ans*base%mod;
    16         base=base*base%mod;
    17         b>>=1;
    18     }
    19     return (int)ans;
    20 }
    21 int gcd(int a,int b)
    22 {
    23     return b==0?a:gcd(b,a%b);
    24 }
    25 int x,y,m,n,d;    // n/d d=2^x * 5^y * m
    26 int main()
    27 {
    28     freopen("fracdec.in","r",stdin);
    29     freopen("fracdec.out","w",stdout);
    30     stringstream ss;
    31     cin>>n>>d;
    32     int g=gcd(n,d);
    33     n/=g;d/=g;
    34     m=d;
    35     while(m>1 && (m&1)==0) m>>=1,++x;
    36     while(m>1 && (m%5)==0) m/=5,++y;
    37     if(m==1) 
    38     {
    39         if(n%d==0) ss<<n/d<<".0";
    40         else ss<<setprecision(max(x,y))<<setiosflags(ios::fixed)<<(double)n/(double)d;
    41     }
    42     else
    43     {
    44         int i;
    45         for(i=1;;++i) if(pow_mod(10,i,m)==1) break;
    46         //printf("%d\n",i);
    47         ss<<n/d<<'.';
    48         n%=d;
    49         for(int j=0;j<max(x,y)+i;++j)
    50         {
    51             if(j==max(x,y)) ss<<'(';
    52             n*=10;
    53             ss<<n/d;
    54             n%=d;
    55         }
    56         ss<<')';
    57     }
    58     ss>>s;
    59     int sz=s.length();
    60     for(int i=0;i<sz;++i)
    61     {
    62         if(i%76==0 && i!=0) putchar(10);
    63         putchar(s[i]);
    64     }
    65     putchar(10);
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    mysql的cmd窗口查看数据库信息
    常见抓包工具
    图形数据库
    支付宝支撑双十一4200万次/秒的数据库请求峰值的技术实现
    处理tomcat内存溢出问题
    maven将jar包打如本地仓库命令
    fastJson去掉指定字段
    mybatis insert 返回主键
    maven引入源码
    mysql实现主从复制
  • 原文地址:https://www.cnblogs.com/lowsfish/p/4299410.html
Copyright © 2020-2023  润新知